请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

jwt的其他缺点?

老师,JWT是不是还有其他的缺点?

  1. JWT一旦生成,在失效之前,总是有效的。后端没办法控制使该JWT token提前失效?从而无法强行“踢”掉一个用户的登录
  2. 请问1的解决方法是什么,把JWT token 存入 redis 中就可以解决这个问题了吗?如果是这样,那是不是与方案2( token + redis )一样了?
  3. JWT还需要消耗时间来解析(解密)才能得到用户数据,应该没有token+redis的速度快吧,但是为什么在网上看到JWT的资料这么多,比redis+token多了好多倍,为什么网上都推崇JWT而不是后者呀?就因为JWT token不储存在服务器,不会造成服务器压力 这一点吗?
  4. 如果不使用JWT而使用redis+token方案,后者部署在多台服务器上是不是没有前者的性能好?
  5. 老师,麻烦您尽量详细地解答我上述的问题,我在这个问题上纠结好久了,一直没有定下来使用哪个方案?特别是第1点,您在本章后面的小节中有给出来代码解决该问题吗?如果没有的话,麻烦您的解题思路?
    非常感谢!!!(如果没时间,晚点回答也行,希望可以得到老师您详细地解答!!!)

正在回答

1回答

甲蛙 2023-04-09 19:43:53

如果要实现踢下线的功能,加上redis还不够,还得有数据库,记录会员ID和JWT的关联,这样才能知道同一个用户同时登录了几次。

踢下线逻辑:登录后,到数据库查同一用户的所有的JWT,将这些记录从redis中迁移。

因为大多数项目没有踢下线的需求,所以使用JWT会更简单些,不需要用redis,也就性能会更好。

如果你要踢下线,那可以考虑用token+redis+数据库的方案

0 回复 有任何疑惑可以回复我~
  • 提问者 慕神4535282 #1
    老师,如果我的情形是就算用户此刻只使用一个设备登录,我希望在后台提前把他踢走。这种场景下是不是使用JWT做不到,因为JWT不可以提前失效?
    回复 有任何疑惑可以回复我~ 2023-04-10 11:27:18
  • 甲蛙 回复 提问者 慕神4535282 #2
    踢下线,还是用上面的方案,需要加上redis和数据库,从数据库中查同一用户的所有的JWT,将这些记录从redis中迁移
    回复 有任何疑惑可以回复我~ 2023-04-12 09:46:11
  • 提问者 慕神4535282 回复 甲蛙 #3
    老师,这样做的话,那是不是没必要使用JWT 了,因为上述方案加上了redis和数据库,体现不出JWT的优点(不用在服务器端存储这些信息)。还不如使用 redis + token。
    回复 有任何疑惑可以回复我~ 2023-04-12 17:30:11

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信