21.12.23更新
评论区大佬 @斯文的小远吖 给出的思路:“利用刷新token,生成token时将加密再加密之后的用户密码,存入token,使用refreshToken模式。token5秒过期。refreshToken 2天或者1个月过期或者更长。需要客户端做代码支持,访问接口出现401(token失效时),使用refreshToken去安全平台申领新的token,申领时检测数据库密码加密之后是否复合token中加密再加密之后的用户密码、数据库里用户是否已被封禁等。如若用户密码发生修改,或已被封禁,则拒绝颁发token。给一段关键代码,这是使用oauth2实现的。”
…这是很久很久之前的帖子了,我就不写了,有空下个学期再研究。
其实前端删掉这个Token不就行了吗(小声bb
不行,这样即使退出登录后拿着以前的token还是可以访问到。
看了半天,感觉网上没有好的解决方案。真让人头大。如何Logout呢?
既然接口有这个要求,必须实现啊。绞尽脑汁,写一下可行的两种方法,虽然还是挺蠢的。
第一种办法:
登录第一次生成token时,把token存入数据库。每次请求验证一下是不是和数据库的token一样。退出登录时,删掉数据库里的token。
第二种办法:
这是我可能要采用的方法。
就是退出登录时,改变加密的String JWT_SECRET(我的是这样写)。这样由于生成token的方法变了,即使是相同的用户也不能拥有一样的token了。原来的token失效。
// 很久之后的更新:经评论区指正,这样做会使所有用户的token都失效,我自己就一个用户没考虑这个…