我最近使用laravel 5.4并且我想使用tymon / jwt-auth软件包通过发送访问令牌来保护我的API,但是我的问题在令牌过期时发生我无法在过期之前刷新它并且我预期令牌将是自动刷新
public function handle($request, Closure $next)
{
try{
$user = JWTAuth::parseToken()->authenticate();
}catch (JWTException $e) {
if($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException) {
return response()->json(['token_expired'], $e->getStatusCode());
}else if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException) {
return response()->json(['token_invalid'], $e->getStatusCode());
}else{
return response()->json(['error'=>'Token is required']);
}
}
return $next($request);
}
答案 0 :(得分:0)
您只需要此代码段即可进行身份验证:
$credentials = request(['email', 'password']);
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
确保在路由的中间件上包含jwt.auth和jwt.refresh,如下所示:
Route::Group(['middleware' => [
'jwt.auth',
'jwt.refresh',
]], function() {
//list your route here
....
....
....
jwt.refresh会在您每次访问路由时刷新令牌。并将其添加到您的.env
中JWT_BLACKLIST_GRACE_PERIOD=60
您可以将数字从60秒调整为任何其他值。此设置将设置令牌在重新刷新之前有效的时间。
答案 1 :(得分:-1)
一种方法是使用try catch在中间件中捕获“令牌过期异常”,并使用JWT :: refresh($ old_token)刷新旧令牌以获取新令牌。结果,您将获得一个新令牌。将此新令牌发送到前端并替换旧令牌。 使用Tymon最新开发人员版本,它支持黑名单启用超时。这有助于防止我们的同时请求被旧令牌列入黑名单。