看了这个教程后 Laravel 5 开发 API 教程,jwt.auth和jwt.refresh这两个middleware有什么区别?分别是什么用的?
微信里点“发现”,扫一下
二维码便可将本文分享至朋友圈。
jwt.refresh 可以理解为在你的token过期后自动为你刷新token并返回。就像你可以手动获取新的token一样:
jwt.refresh
$newToken = JWTAuth::parseToken()->refresh();
下面的写法可以直接自动将刷新的token放在header并返回
Route::group(['middleware' => ['jwt.auth', 'jwt.refresh']], function () { // Your routes here that needs to be protected by the token });
@JellyBool 这里有个过期时间和刷新时间的概念,如果用到这两个概念,使用的流程是什么?
个人的理解是这样: ttl:token生存的时间间隔 refresh_ttl: 刷新token的时间间隔
ttl
refresh_ttl
这样出现以上的原因,主要是由于下面的应用场景:
在JWT中,提倡每次刷新token的时间要短于token的生存时间,也就是在token过期之前去刷新token。
比如,将ttl设置为一周,但是提倡的做法是每次用户请求的时候我们都刷新token或者将token的刷新时间设置为一个小时,这个时候,如果用户距离上一次访问我们的站点的时间超过一个星期,这个时候我们就把token放进了黑名单,而且需要用户再次登录才可以获取新的token。这样就保证了用户的体验 @pengbo37877
@JellyBool 有没有可能是ttl要小于refresh_ttl呢,用户用token访问api,在ttl时间内正常,超过ttl但是没有超过refresh_ttl的时候jwt自动生成一个新的token返回给用户,老的token放入黑名单,后续用新的token访问api,这样如果用户在refresh_ttl时间内都不需要重新登录
个人的理解是:如果ttl小于refresh_ttl。那refresh_ttl就没什么用了。
超过ttl但是没有超过refresh_ttl的时候jwt自动生成一个新的token返回给用户
没理解错,这个时候,我们已经刷新了一个token @pengbo37877
@JellyBool 使用了jwt.refresh Middleware后,貌似token只可以用一次?
@mingyoung 用jwt.refresh middleware的路由每次请求都会刷新token,新的token会在返回的header里面带回来,如果客户端的请求没有并发的话应该没有问题,如果有并发的话就会出问题,这个时候启用下blacklist_enabled,并设置blacklist_grace_period的值大于0就可以满足并发的需求。
@JellyBool token放进了黑名单 这个怎么做?