我正在使用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']);
});
});
答案 0 :(得分:1)
当您使用刷新令牌(jwt.refresh中间件)时,这是预期的行为。
https://github.com/tymondesigns/jwt-auth/wiki/Authentication
此中间件将再次尝试从请求中解析令牌,然后将刷新令牌(从而使旧令牌无效)并将其作为下一个响应的一部分返回。这实际上产生了一个使用令牌流,如果令牌被泄露,它会减少攻击窗口,因为它只对单个请求有效。
如果您不想使用刷新令牌,那么您可以放弃该中间件。如果您确实想使用刷新令牌,则需要在每次请求时更新用于身份验证的令牌。