使用 JWT 作为用户登录认证的时候,是否需要每次都通过 jwt payload 里面的信息(如 ID)来通过数据库查询出用户?
否则怎么判断当前用户是否已经被禁用、删除、角色权限变化等信息,直接使用 jwt payload 里面的信息很可能已经过时?
首先使用JWT
的目的就是做服务端无状态,不想在服务端存储与用户Session
有关的数据。而JWT
内容仅是简单的Base64编码,故不宜存储敏感信息。一般存储用户ID,或者与用户ID唯一映射的一个字符串(隐藏数据库真实用户ID)。
再回到问题本身,可以考虑使用缓存的方式。比如有个专门封装的校验是否被禁用?
是否被删除?
权限是否发生变化?
的服务。这个服务只是网关层的一个小模块,具体实现可依赖Redis等缓存,加快校验速度。
假设Redis里面存储有 被禁用账号列表? 每次查询一下当前账号是否被禁用。若数据量较大时,还可进行分桶?布隆过滤器等手段优化。
延伸一下,这个流程很适合使用责任链设计模式
啊。
附加信息比较多,感觉难以做一个通用的解决方案,大概率要根据实际业务来做具体设计。
一般项目中 jwt不放敏感的信息,通常只是放个userId,封禁,等一系列的变化都是通过userId 去关联查询,而且这些关联信息会存储在缓存中,避免给数据库造成压力
jwt只放用户标识类信息,过多的信息不需要都放在里面,如果需要查询更新用户信息,查redis/数据库里。redis/数据库做好同步
JWT (JSON Web Tokens) 是一种开放标准 (RFC 7519) 定义的方式,用于在网络之间安全地传输信息。这些信息可以用于验证、授权、信息交换等。
关于你的问题,这里有一些可能的解决方案。
在选择最佳方法时,你需要考虑你的应用程序的具体需求和限制。例如,频繁查询数据库可能会影响性能,而使用刷新令牌可能会增加复杂性并需要额外的安全措施(例如,刷新令牌需要被加密或安全地存储)。
1.手机翻转,或者折叠屏该怎么监听然后动态重新渲染echarts,需要加防抖或者节流吗? 2.横向条形图,左右两边的label怎么永远出现在可视范围内?比如148.00就已经飘出去了,看不全,还有左侧还有很多留白区域,不够美观 3.饼图中间的title的text和subtext能响应式的改变字体大小吗?像这种情况,字体完全超出了饼图范围
markdown图片可以传到本地文件夹但只能传jpg,png传不了,数据库也有路径,但是不渲染出来 头像上传七牛云,密钥和域名都写得对的但点击就报400
如果dev分支里面部分功能要上生产,该怎么做?比如dev里有ACD这四个功能,A还在测试,生产里有CD这几个功能,然后目前要上线B功能,该怎么把B功能合到生产分支里? 首先不能把dev全部合到生产分支,也不能把开发B功能的分支合到生产分支吧?因为开发B功能的分支是由dev拉出来的,也会有A功能的代码。
vue2前端跨域问题,后端放置到公网上,所有人都可以访问,还配置了access-control-allow-origin为*,前端拿接口地址到浏览器可以拿到数据,使用apiPost测试,接口可以拿到数据,但是放到前端代码里面就跨域,如下图 vue2前端跨域问题
目前用的是harmonyOS4.0版本,遇到了panel的高度问题,点击panel外的区域也会拖动panel的大小,需求是拖动panel外的区域不会影响panel,而是正常的页面滑动(类似一些著名听书软件的功能),一直没有一个完美的解决方案,期待大佬解惑 尝试过onChange或onHeight事件 高度随mode改变而改变,结果是失败的
本文向大家介绍使用Oracle数据库登录时被告知用户被锁怎么解决,包括了使用Oracle数据库登录时被告知用户被锁怎么解决的使用技巧和注意事项,需要的朋友参考一下 在登陆时被告知test用户被锁 1、用dba角色的用户登陆,进行解锁,先设置具体时间格式,以便查看具体时间 2、查看具体的被锁时间 3、解锁 4、查看是那个ip造成的test用户被锁 查看$ORACLE_HOME/n