当神不再是我们的信仰,那么信仰自己吧,努力让自己变好,不辜负自己的信仰!

API 开发中可选择传递 token 接口遇到的一个坑

  1. 在做 API 开发时,不可避免会涉及到登录验证,我使用的是jwt-auth
  2. 在登录中会经常遇到一个token过期的问题,在config/jwt.php默认设置中,这个过期时间是一个小时,不过为了安全也可以设置更小一点,我设置了为五分钟。
  3. 五分钟过期,如果就让用户去登录,这种体验会让用户直接抛弃你的网站,所以这就会使用到刷新token这个功能
  4. 正常情况下是写一个刷新token的接口,当过期的时候前端把过期的token带上请求这个接口换取新的token
  5. 不过为了方便前端也可以使用后端刷新返回,直至不可刷新,我用的就是这个方法:使用 Jwt-Auth 实现 API 用户认证以及无痛刷新访问令牌
  6. 而坑就是这样来的,

* 在必须需要登录验证的接口设置刷新token

  • 而有些页面,比如文章列表页面,这个接口登录与不登录皆可访问,不过登录的时候可以在页面上显示是否点赞了这篇文章。所以这个接口直接使用的是jwt-auth默认的option中间件

  1. 一开始也没有发现问题,直到测试的时候,发现文章列表页面点赞过的文章,过了一段时间再刷新的时候发现不显示已点赞,但是进入个人中心的已点赞文章可以看到。
  2. 刚开始测试没找出原因,直接暴力调试代码,发现没获取到登录用户,一想不对呀,已经传token为何获取不到。经过发现,去到个人中心,再回到新闻列表页就可以正常显示,过了一段时间又不显示了。
  3. 经过这一轮之后,大概明白,在新闻列表页时,token已经过期,但是当时图方便用的jwt-auth默认的中间件,不会刷新token,所以这个接口获取不到登录的用户。当进入个人中心,发现当前token已经过期,后台刷新token返回,这时候再回到文章列表页就可以得到正常的数据,一段时间后,token又失效了,所以有无法看到点赞过的文章
  4. 解决方法,自己写一个option中间件,当存在token的时候,也需要做token刷新处理。


问题解决。
最后说一个并发会出现的问题:

jwt-auth已经想到这种情况,我们只需要设置一个黑名单宽限时间即可
《API 开发中可选择传递 token 接口遇到的一个坑》
我设置为5秒,就是当token_1过期了,你还能继续使用token_1操作5秒时间

原文地址

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注