在JWT Laravel中使用Authorization Header时获取token_not_provided

时间:2015-10-13 11:43:16

标签: php laravel laravel-5.1 jwt

我读了this tutorial,我设法让它完美运作。唯一的问题是,当我从?token = {token_here} 切换到授权承载{token here} 时,它会停止工作。 我正在使用Postman,我在Header字段中写了授权,在值中写了 Bearer {white space} {token} 。 我使用的库是https://github.com/tymondesigns/jwt-auth

我在Wiki上读到有关Apache问题的内容,我不确定这是不是我的情况。我用PHP函数getallheaders()诊断它。如果我 die并转储该功能,则表明授权标头可用。我尝试使用和不使用.htaccess修改。

的.htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

#    RewriteCond %{HTTP:Authorization} ^(.)
#    RewriteRule . - [e=HTTP_AUTHORIZATION:%1]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]    
</IfModule>

路线档案

dd(getallheaders()['Authorization']);
Route::group(['prefix' => 'api'], function() {

    Route::post('login', 'AuthenticateController@email');

    Route::group(['middleware' => ['jwt.auth', 'jwt.refresh']], function() {
        Route::post('logout', 'AuthenticateController@logout');

        Route::get('test', function() {
            return response()->json(['foo' => 'bar']);
        });
    });
});

关于我出错的地方的任何想法?

提醒:如果我使用 http://localhost/projects/linus/public/api/test?token= {token} ,则可以使用。

1 个答案:

答案 0 :(得分:2)

事实证明,问题是.htaccess文件中的标头配置在两行中都缺少*。而不是

RewriteCond %{HTTP:Authorization} ^(.)
RewriteRule . - [e=HTTP_AUTHORIZATION:%1]

显示为

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

特别感谢James-Daddies