laravel JWT令牌只能使用一次,并在第二次尝试时获得无效令牌

时间:2017-10-22 11:02:43

标签: php laravel jwt

我正在使用JWT令牌,它在前一段时间内运行良好。但是现在,当我使用令牌时,我首先尝试获得我想要的结果,然后我第二次检查它(2分钟后),我得到无效令牌: 这是我的身份验证码:

  $credentials = $request->only('email', 'password');

    try {
        // verify the credentials and create a token for the user
        if (! $token = JWTAuth::attempt($credentials)) {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
    } catch (JWTException $e) {
        // something went wrong
        return response()->json(['error' => 'could_not_create_token'], 500);
    }

    // if no errors are encountered we can return a JWT
    return response()->json(compact('token'));

这是我的web.php文件

Route::group(['prefix' => 'api/v1','middleware' => ['cors']], function(){

Route::resource('authenticate', 'AuthenticateController');
Route::post('authenticate', 'AuthenticateController@authenticate');
Route::group(['middleware' => ['jwt.auth', 'jwt.refresh']], function() {
    Route::resource('books', 'BooksController', ['except'=>'store', 'update']);
});

});

1 个答案:

答案 0 :(得分:1)

当您使用刷新令牌(jwt.refresh中间件)时,这是预期的行为。

https://github.com/tymondesigns/jwt-auth/wiki/Authentication

  

此中间件将再次尝试从请求中解析令牌,然后将刷新令牌(从而使旧令牌无效)并将其作为下一个响应的一部分返回。这实际上产生了一个使用令牌流,如果令牌被泄露,它会减少攻击窗口,因为它只对单个请求有效。

如果您不想使用刷新令牌,那么您可以放弃该中间件。如果您确实想使用刷新令牌,则需要在每次请求时更新用于身份验证的令牌。