JWT 生成的 token 的 payload 包含用户名信息;如果我们允许用户修改用户名,token 会立即失效,那我们是不是只能让用户重新登录然后获取新的 token? 有没有大佬有更好的方法?
1
optional 2020-08-28 20:23:25 +08:00 1
用户名会改那就 jwt 里放用户 id 啊,,难不成用户名是主键不成?
|
2
a132811 2020-08-28 20:27:23 +08:00 1
让 token 失效——只能让用户重新登录然后获取新的 token 。可以用 redis 做缓存,删除缓存 token 就失效
让 token 不失效——就不要把用户名生成 token,可以用户的唯一 Id 作 token 呀。 |
3
renmu123 2020-08-28 20:31:24 +08:00 via Android 1
修改用户名的时候返回一个更新过的 token
|
4
iseki 2020-08-28 20:33:39 +08:00 via Android
所以你们使用用户名作为用户的唯一标识而不是一个相对于用户透明的唯一 id 吗
|
6
wxd92 OP @a132811 让 token 不失效——就不要把用户名生成 token,可以用户的唯一 Id 作 token 呀。 ----如果还包含用户名呢?除了 id
|
7
StevenTong 2020-08-28 20:43:24 +08:00 1
2 楼已经说了两个常用的方案了。
1. jwt token 使用 redis token store 之类的管理起来,修改 username 之后 revoke 当前 token 。但是这样就违背了 jwt token 的设计初衷了。 2.username 不是用户名而是一个 user unique id,用户名自己通过 userinfo 去拉取。 |
8
wxd92 OP @StevenTong 源码生成 payload 时,包含了 username
def jwt_payload_handler(user): payload = { 'user_id': user.pk, 'username': username, 'exp': datetime.utcnow() + api_settings.JWT_EXPIRATION_DELTA } |
11
jakes 2020-08-28 23:47:21 +08:00 1
token 不要放 username 啊,user id 已经可以表示用户了为什么非得把用户名这种会变更的放 token 里?放 Redis 里通过 user id 取不香吗?
|
12
jakes 2020-08-28 23:47:52 +08:00
不要想着非得在 payload 里放东西
|