JWT 怎么解决用户被禁用的问题?-灵析社区

winkkkkk9421

使用 JWT 作为用户登录认证的时候,是否需要每次都通过 jwt payload 里面的信息(如 ID)来通过数据库查询出用户? 否则怎么判断当前用户是否已经被禁用、删除、角色权限变化等信息,直接使用 jwt payload 里面的信息很可能已经过时?

阅读量:16

点赞量:0

问AI
首先使用"JWT"的目的就是做服务端无状态,不想在服务端存储与用户"Session"有关的数据。而"JWT"内容仅是简单的Base64编码,故不宜存储敏感信息。一般存储用户ID,或者与用户ID唯一映射的一个字符串(隐藏数据库真实用户ID)。 再回到问题本身,可以考虑使用缓存的方式。比如有个专门封装的校验"是否被禁用?" "是否被删除?" "权限是否发生变化?"的服务。这个服务只是网关层的一个小模块,具体实现可依赖Redis等缓存,加快校验速度。 假设Redis里面存储有 被禁用账号列表? 每次查询一下当前账号是否被禁用。若数据量较大时,还可进行分桶?布隆过滤器等手段优化。 延伸一下,这个流程很适合使用"责任链设计模式"啊。 附加信息比较多,感觉难以做一个通用的解决方案,大概率要根据实际业务来做具体设计。