【发布时间】:2017-12-07 00:24:44
【问题描述】:
我正在使用 ExpressJS、Mongodb(Mogoose) 构建一个应用程序。应用程序包含用户在访问它之前必须经过身份验证的路由。
目前我已经编写了一个快速中间件来做同样的事情。在这里,借助 JWT 令牌,我进行 mongodb 查询以检查用户是否经过身份验证。但觉得这可能会给我的数据库带来不必要的请求负载。
我应该为这个特定任务集成 redis 吗?
它会提高 API 性能吗?或者应该继续现有的 mongodb的方法?
如果我对此有更多见解会有所帮助。
【问题讨论】:
-
为什么需要存储 JWT 令牌? JWT 不是用于无状态身份验证,您不需要在服务器端存储令牌,而是让客户端保留它,您只需要验证签名以查看数据是否真实。因此,在服务器端使用无状态的好处是您无需担心与会话相关的问题,您所做的恰恰相反。
-
@Redisson_RuiGu 谢谢,明白你的意思。什么是查找用户是否经过身份验证的正确方法,1)如果 jwt.verify() 返回一些有效令牌(我相信这已经足够了),2)或者我应该拿这个令牌并检查数据库(我认为这个有点贵)?
-
您可以将用户角色和其他信息保留在有效负载部分中,然后您可以在验证令牌时了解他/她是否经过身份验证。未经身份验证的用户不会拥有一个。
-
@Redisson_RuiGu 在一种情况下我仍然感到困惑。假设我们有一个用户 (U1) 登录并存储了有效的令牌。现在管理员已删除/停用该用户 (U1)。在这种情况下,我不想让该用户 (U1) 访问真实路由。我应该如何处理这种情况?有没有办法根据用户信息(比如用户 ID)撤销 JWT 令牌?或者应该在每个请求上检查数据库以检查用户是否有效/存在。
-
在这种情况下维护黑名单与维护白名单没有区别吗?你只是在使用 Redis 说“这个令牌还没有'注销'”
标签: node.js mongodb express redis jwt