后台判断token过期,后台刷新token,接下来该如何处理

如标题所示

我再详细描述一下我遇到的问题,如果我再发送请求的试试,后台验证header中的token,如果这时候,发现token过期,然后一系列判断其为合法token,允许token刷新,后台主动刷新token,并且成功获得新的token,那么问题来了:

因为请求的接口是有返回信息的,我这时候是返回重新刷新的token给前端吗,还是获得新的token后,直接返回接口请求应该返回的数据

1.如果是直接返回token,那前端是不是每个带上token的请求,都需要判断是否有token刷新返回,如果是返回刷新的token,那不是又要用新返回的token,重新发送一次请求???我觉得应该不会这么做

2.如果是返回接口应该返回的具体数据,那token怎么办?这个时候后台刷新了token,然而前端却还是保存的那个过期了的token,不过后台可以把新的token直接设置到返回的方法体中的header中,如果是这样处理,那前端怎么判断header中的token是刷新了的,难不成还是每个带token的请求前端都要去返回的数据中获取header中的token?感觉又回到了原点.....

求各位大佬帮助下,以上两种方法有没有什么比较好的解决方法,或者抛开我的两种方法,有其他合适的,符合我的需求的解决方法,小弟大学生一枚,给自己挖的坑,想填好

阅读 26.9k
9 个回答

参考微信做法

返回 token 的时候,同时返回了还有多少秒过期 ($expire 秒数)

前端保存 token 同时,记下啥时候过期 (now + $expire)

前端 调用用前判断 如果 token 过期了就先自己主动 刷新 token
这部分可以做成一个 getToken()方法 ,方法里处理掉过期判断及重新获取 token,对已有的代码逻辑不产生影响

后端的逻辑很简单,token 非法 或 过期 就返回错误

token失效了 就返回失败
让用户自己登录去

讲道理,,简单点你可以这样,
首先当你请求后端,后端发现token过期,这个时候后端肯定给你返回error对吧,
然后你这个时候需要在请求刷新token的接口,而不是同时让服务端给你token对吧,
请求刷新token的接口成功之后,保存到哪里都可以,什么cookie啊之类的,然后呢,带上新的token重新请求之前的api,
这个方案我觉得挺适合你的。。。

token过期,只能重新登录
用户每次请求过来都要修改token的过期时间
token自用户登录后就不能再变更了

  • token在登录时保存,每次请求头都加上token
  • 如果请求后端发现前端token不对(过期或是什么其他原因)返回错误,前端跳转到登录页面重新登录
  • token都过期了就重新登录得了,还返回个新的给他那还有啥意义
  • 把token写到cookie里一劳永逸
  • 如果需求要在禁cookie下运行, 前端写一个ajax全局响应拦截器, 每次响应都把响应头的token刷新一次, 并每次判断状态码决定是否跳转登陆页面

1.后端判断token过期 直接返回401
2.前端保存token过期时间 判断如果过期则把前端请求添加到一个队列里面 先执行刷新token操作
3.等待获取到新的有效token后 再执行队列里面的请求操作

1、token时返回失效码(如1002),前端根据失效码跳转到登录界面
2、前端发起请求到后台,先验证token,token失效时(过期),后台刷新token,将token与请求数据一起返回,前根据返回体是否带有token,进而判断token是否刷新,若刷新,则将token重新保存(推荐localStorage)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏