刷新 token
一般是 token
过期才会去刷新吧? 如果 token
没有失效,主动获取新的 token
的情况,假如我连续刷新几次,几次 token
都有过渡时间? 而且刷新 token
以后你已经拿到最新且有效的 token
了,以前的 token
还有什么存在意义呐?
举个最简单的例子, 把 token 想象成密码, 已经修改了密码,以前的密码不是立即失效么?
@OneStep 不不不,你有没有想过并发的情况,我现在是把刷新token写在首次载入全局布局上的时候刷新token,这个时候页面还有其他ajax请求,其他请求有可能提示token过期了,或者说,刷新token,这一步骤应该写在哪里比较合适呢?
@wangjiu 首次载入应该是获取token
,而不是刷新token
。我没太理解你说的并发? 假如你用的是 OAuth 2.0
这种API认证方式,token
是颁发给客户端的,或者说同一个用户在不同地方同时登陆获取的token
,他们的token
都是获取的,而不是刷新的. 获取到的token
多个客户端或者同一个用户不同地方登录的都能使用.
刷新token
一般在后端或者app之类发送请求,但是api
认证token
失效后抛出一个异常,然后后端或者APP根据这个异常来主动刷新token
我觉得你可以在首次载入的时候全局判断是否存在token,如果存在token则判断是否过期,需要刷新, 如果不存在就获取token
文档里面有个 Dingo API 中文文档
, api认证我昨天刚翻译好,你可以去看看
@wangjiu 我上面已经说的很清楚了
第一次载入为什么要刷新token呐?
token 你都没获取到,你就刷新??????
或者说你以前缓存了token, 你不应该是判断以前的token是否有效么?
而且还有一个逻辑问题, 既然你刷新了token,不应该拿到新的token才去进行下一步操作么?
@OneStep 假如A请求发出的时候token还没有过期,B请求发出的时候token过期了,但是因为某种原因A请求到达服务器的时间比B晚,那A请求就会抛出异常,然后又去请求一次服务器刷新token了。
像微信的access_token,当你刷新的时候,老的token在5分钟之内还是有效的
@GerBawn 照您所说的,假如A请求发出的时候token还没有过期,B请求发出的时候token过期了,但是因为某种原因A请求到达服务器的时间比B晚,那A请求就会抛出异常,然后又去请求一次服务器刷新token了,A请求继续去刷新一次Token没有问题的,让它再刷一次咯,反正A刷完了代表更新了token对吧,那下次请求就直接会带上最新的这个A请求刷新的token来了,那么会有什么问题?这不挺好的吗
config
目录下的 jwt.php
文件配置里 blacklist_grace_period
参数
允许过期 token 在一定时间内访问,这个就能解决并发请求 token 失效的问题。
我的做法是在token失效前允许登录一次,Auth::onceUsingId()
并且新的token通过setAuthenticationHeader
在header里响应,客户端需要获取header及时更新token
顺便打下小广告
https://github.com/cyd622/laravel-api
这个是我自己参考大神们的经验,汇总起来的一个快速API初始化助手
安装 composer require cyd622/laravel-api
目前实现的功能:
- 统一Response响应处理
- 自定义异常捕获拦截处理
- Laravel Api-Resource资源 分页返回统一响应
- jwt-auth用户认证与无感知自动刷新
- jwt-auth多角色认证不串号
- 单一设备登陆
推荐文章: