呼如林
刚才研究了一下源码得到如下答案最简单的办法就是使用jwt自带的jwt.refresh路由中间件(在这之前应该使用jwt.auth验证了token的合法性).源代码如下
public function handle($request, \Closure $next)
{
$response = $next($request);
try {
$newToken = $this->auth->setRequest($request)->parseToken()->refresh();
} catch (TokenExpiredException $e) {
return $this->respond('tymon.jwt.expired', 'token_expired', $e->getStatusCode(), [$e]);
} catch (JWTException $e) {
return $this->respond('tymon.jwt.invalid', 'token_invalid', $e->getStatusCode(), [$e]);
}
// send the refreshed token back to the client
$response->headers->set('Authorization', 'Bearer '.$newToken);
return $response;
}
步骤为:parseToken()把前端传过来的在http header中的token解析出来refresh()函数负责依据现在的token生成一个新的token并把现在的token放到黑名单最后将newToken写到返回给客户端的header中
最后我在研究源码的时候还发现如果我们需要每个请求都要刷新token的话那么就用jwt.refresh这一个中间件就好,不再需要jwt.auth这个中间件了。因为产生新的token的时候会解析出原来token中的payload的信息,比如sub。因此也会对原始的token进行验证。