我正在使用 JWT 令牌授权 android 用户,但是当我发送它时它达到 null,服务器是否删除授权标头?是否需要更改配置以允许我的标头传递到后端?
只是为谷歌人更新,因为我也在寻找解决方案,觉得修改核心代码不是一个好主意!
我得到的解决方案是使用中间件。在我的 JavaScript 中,我设置了
X-Authorization
标题而不是 Authorization
.
然后我创建了一个 HTTP 中间件类来获取这个标头并设置我们的授权标头 -
<?php
namespace App\Http\Middleware;
use Closure;
class XAuthorizationHeader
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next) {
// check if we have an X-Authorization header present
if($auth = $request->header('X-Authorization')) {
$request->headers->set('Authorization', $auth);
}
return $next($request);
}
}
然后在
App\Http\Kernel.php
$middleware
数组中,在最开始添加这个中间件。
protected $middleware = [
XAuthorizationHeader::class,
任何进一步的代码将能够检索
Authorization
标头,就像当您将它作为X-Authorization
标头传递时它确实存在一样。
在 public/.htaccess 中添加授权处理代码:
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
参考:https://github.com/laravel/laravel/blob/master/public/.htaccess
按照第二个解决方案。
我在 cPanel 托管中遇到了这个问题,一些安全模块或插件从标题中删除了授权数据,我正在使用
Authorization Bearer
。我通过重命名 Authorization
-> ApiToken
并在 Laravel 核心中更新几行代码来绕过它。
文件
vendor\laravel\framework\src\Illuminate\Http\Concerns\InteractsWithInput.php
方法bearerToken
.
public function bearerToken()
{
$header = $this->header('Authorization', $this->header('ApiToken', ''));
if (Str::startsWith($header, 'Bearer ')) {
return Str::substr($header, 7);
}
}
顺便说一句,编辑核心代码并不理想。
我遇到过类似的问题。实际上,我们需要在两个地方启用重写规则。
在 public/.htaccess 中添加授权处理代码:
RewriteCond %{HTTP:Authorization} 。 RewriteRule . - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]*
在/etc/apache2/sites-enabled中添加相同的代码
# 处理授权标头
RewriteCond %{HTTP:Authorization} 。
RewriteRule . - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]*