我正在使用JWT令牌来授权android用户,但当我发送它时,它到达为null,服务器是否删除Authorization头?是否需要更改配置以允许我的头传递到后端?
ua4mk5z41#
只是更新的谷歌,因为我也在寻找一个解决方案,并认为修改核心代码不是一个好主意!我的解决方案是使用中间件。在我的JavaScript中,我设置了X-Authorization头而不是Authorization。然后,我创建了一个HTTP中间件类来获取这个头并设置我们的Authorization头-
X-Authorization
Authorization
<?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头传递时它实际存在一样。
App\Http\Kernel.php
$middleware
protected $middleware = [ XAuthorizationHeader::class,
u5rb5r592#
在public/.htaccess中添加授权处理代码:# Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]参考:https://github.com/laravel/laravel/blob/master/public/.htaccess
# Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
dnph8jn43#
按照第二个解决方案。
我在cPanel主机中遇到了这个问题,一些安全mod或插件从头中剥离了授权数据,我使用Authorization Bearer。我通过重命名Authorization-〉ApiToken并更新Laravel核心中的几行代码来绕过它。文件vendor\laravel\framework\src\Illuminate\Http\Concerns\InteractsWithInput.php方法bearerToken。
Authorization Bearer
ApiToken
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); } }
顺便说一句,编辑核心代码并不理想。
goqiplq24#
我也遇到过类似的问题。实际上,我们需要在两个地方启用重写规则。在public/.htaccess中添加授权处理代码:
RewriteCond %{HTTP:Authorization} . RewriteRule . - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]*
在**/etc/apache 2/sites-enabled**中添加相同的代码
#处理授权头RewriteCond %{HTTP:Authorization} . RewriteRule . - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]*
4条答案
按热度按时间ua4mk5z41#
只是更新的谷歌,因为我也在寻找一个解决方案,并认为修改核心代码不是一个好主意!
我的解决方案是使用中间件。在我的JavaScript中,我设置了
X-Authorization
头而不是Authorization
。然后,我创建了一个HTTP中间件类来获取这个头并设置我们的Authorization头-
然后在
App\Http\Kernel.php
$middleware
阵列中,在一开始就添加此中间件。protected $middleware = [ XAuthorizationHeader::class,
然后,任何进一步的代码都将能够检索
Authorization
头,就像当您将其作为X-Authorization
头传递时它实际存在一样。u5rb5r592#
在public/.htaccess中添加授权处理代码:
# Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
参考:https://github.com/laravel/laravel/blob/master/public/.htaccess
dnph8jn43#
按照第二个解决方案。
我在cPanel主机中遇到了这个问题,一些安全mod或插件从头中剥离了授权数据,我使用
Authorization Bearer
。我通过重命名Authorization
-〉ApiToken
并更新Laravel核心中的几行代码来绕过它。文件
vendor\laravel\framework\src\Illuminate\Http\Concerns\InteractsWithInput.php
方法bearerToken
。顺便说一句,编辑核心代码并不理想。
goqiplq24#
我也遇到过类似的问题。实际上,我们需要在两个地方启用重写规则。
在public/.htaccess中添加授权处理代码:
处理授权头
RewriteCond %{HTTP:Authorization} . RewriteRule . - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]*
在**/etc/apache 2/sites-enabled**中添加相同的代码
#处理授权头RewriteCond %{HTTP:Authorization} . RewriteRule . - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]*