如题:
目前使用的 token 是 redis 中存 uuid 作为 key,然后返回前端这个 uuid;
那么问题来了:
1.如果用户登录之后修改密码,因为用户已经登录,所以我可以获取他的 token 再删除他的 token,没问题
2.如果用户通过忘记密码来重置密码,那么我给他重新返回 uuid 作为 token,只要之前的 token 没到期,那么仍然有效
如果使用 jwt,那么使用如下:
在 payload 中加入`user_id`然后返回给前端,后端不作保存,只做校验解密
一样的问题:
1.用户再怎么修改密码,`user_id`又不会改变,只要 jwt 不过期,用户再怎么修改密码,之前签发的 jwt 仍然可以校验出来`user_id`
这种问题应该怎么解决呢?
1
kayseen OP 现在有一个思路是这样
```python 1. 在 jwt 的 payload 中添加`user_id`和一个`唯一编码`,同时在 redis 中保存这个编码,如果修改密码,则改变 jwt 里面的编码和 redis 中的编码 可是如果这样,jwt 就已经是有状态的了吧? ``` |
2
chickenJuicer 2019-08-19 18:02:54 +08:00
密码加盐,改密码换盐, 如果盐不对但是 uid 是对的, 那么刷新 jwt
|
3
throns 2019-08-19 18:04:45 +08:00 via Android
|
4
w516322644 2019-08-19 18:07:04 +08:00
一般修改完密码,都退出当前用户重新登录,jwt 这种退出后原来的就进入黑名单,就不能再用这个 token 访问了。
|
5
sytnishizuiai 2020-06-24 14:46:38 +08:00
我碰到了和你类似的问题,用户密码被盗后,找回密码,但是盗号人还是可以用之前签发的 token 使用。
我的 token 签发后不存,所有用户会出现多个 token 都有可能,但我过期超级短,所以也不在意。 |