疑问:
既然jwt可以存储用户信息,为什么不直接将用户信息以及token存入到jwt中,反而存储到redis,再去从redis中根据key获取用户信息,是不是多此一举?以及违背了jwt技术减少数据库查询缓解服务器压力的初衷?
以下是我的理解,如有不对或补充可以随时私信或者评论,一起进步!
-
JWT是未加密的。之所以不将用户信息存入到jwt中,是因为默认情况下JWT是未加密的,因为只是采用了base64算法,拿到JWT字符串后可以转换回原本的JSON数据,任何人都可以解读其内容,因此不能构建隐私信息字段,比如密码等私密信息,防止泄露。JWT只适合在网络中传输一些非敏感的信息。
-
将用户信息存入到redis中,可以实现数据与代码的充分解耦。
-
用户修改密码需要重新登陆。假设我在app上修改了我的登陆密码,app只是跳转到了登陆页面,但是这时我们的本地中还有token未删除,则使用这个token仍然可以继续访问其他接口。但是如果我们将用户信息交给redis管理的话,在修改密码的同时对redis中的token进行清楚操作,那么再去访问其他接口时就无法正常访问了,只能重新登陆。这里的删除操作正好可以通过redis来完成。