有没有什么好的 jsonwebtoken 退出或者修改密码注销token方法?
发布于 5 年前 作者 tmirun 3687 次浏览 来自 问答

不想用 redis,不想存到 RAM 里。

想到的最简单的解决方法:

在你的 user 数据库里加上一列 tokenDate

User table Data tyle
username STRING
password STRING
tokenDate DATE (timestamp)

每次生成 jsonwebtoken 的时候也把 tokenDate 打包进去。 tokenDate 的值会在每次 用户登入,退出或者修改密码的时候更新成最新的 timestamp。 就这样我们每次收到用户的 token 的时候查看 tokenDate 是否和我们数据库保存的一致,如果不一致说明这个token已经废除

缺点很明显

增加数据库查询,虽然是个快速简单的查询,但是 (简单) x (很多很多很多个请求) = ‘这是个问题’

各位有什么好的方法?

3 回复

jwt不是应该登录成功的时候在客户端持久性存储的么?每次请求的时候都带上,后端就根据带过来的jwt校验,退出登录的时候,把客户端存储的jwt删掉,下一次请求的时候就没有jwt了,这个时候就需要重新登录了。

楼上+1。使用jwt服务端应该是无状态的,通过算法来鉴权。

之前尝试过,即使用redis ,也不好解决。 唯一可行的方案是把用户表缓存到redis ,然后每次除了 jwt 校验,还得算密码MD5 与redis 中是否一致。

最后我们选择了降低 token 的时效

回到顶部