授权标头未到达laravel项目中的服务器

时间:2018-04-03 09:37:02

标签: laravel header jwt token hosting

我正在使用JWT令牌来授权Android用户但是当我发送它时它达到null,服务器是否删除了Authorization标头?是否有一个配置我需要更改以允许我的标题传递到后端?

3 个答案:

答案 0 :(得分:5)

只是为Google员工进行更新,因为我也在寻找解决方案,并且认为修改核心代码不是一个好主意!

我得到的解决方案是使用中间件。在我的JavaScript中,我设置的是X-Authorization标头,而不是Authorization

然后我创建了一个HTTP中间件类来选择此标头并设置我们的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标头,就好像它确实存在。

答案 1 :(得分:2)

我在cPanel托管中遇到了这个问题,一些安全模块或插件从标头中删除了授权数据,我使用的是Authorization Bearer。我通过重命名Authorization - &gt;来绕过它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);
    }
}
不过,编辑核心代码并不理想。

答案 2 :(得分:0)

在public / .htaccess中添加授权处理代码:

# Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

参考:here