黑马头条项目 JWT—4.4 JWT禁用问题
发布时间
阅读量:
阅读量
需求
当token被颁发给用户后,在其有效期内该服务端也会予以认可;然而,在该token的有效期内如果需要让它失效,则该如何操作?
此问题的应用场景:
- 账户更改为新身份令牌,并将无效的旧令牌释放;系统永久封禁该账户 *
解决方案
在redis中使用set类型保存新生成的token
key = 'user:{}:token'.format(user_id)
pl = redis_client.pipeline()
pl.sadd(key, new_token)
pl.expire(key, token有效期)
pl.execute()
代码解释
| 键 | 类型 | 值 |
|---|---|---|
| user:{user_id}:token | set | 新token |
当客户端采用token发起请求时,在检测到存在该用户对应的user:{}:token记录时(若验证该token有效),Redis系统将对该记录进行读取和解析
- 若无记录存在,则允许通过并进入视图进行业务处理。
- 否则(若有记录),则需检查当前请求中的token值是否存在于Redis存储的集合中:
- 若该token值存在于Redis集合中的对应位置上,则允许通过。
- 否则(即该token值不在Redis集合中的对应位置上),则返回403错误状态并停止进一步业务处理。
- 否则(若有记录),则需检查当前请求中的token值是否存在于Redis存储的集合中:
key = 'user:{}:token'.format(user_id)
valid_tokens = redis_client.smembers(key, token)
if valid_tokens and token not in valid_tokens:
return {'message': 'Invalid token'.}, 403
代码解释
说明:
Redis记录设置的有效时长相当于一个Token的有效期,在Old Token过期后会触发Redis自动清除记录以释放空间
知识点:hs256和sh256区别:

全部评论 (0)
还没有任何评论哟~
