朋友好,
我正在开发一个应用程序,在用户系统中添加了用于管理员的功能,以提高帐户级别(如果为10级,则为管理员)或禁止其进入网站。
用户登录后,他会收到一个令牌,其中包含有关其帐户级别(无论是否被禁止)的信息。
此功能可以正常工作,但是如果用户被禁止,由于可以从令牌中获取信息,因此他们可以继续使用该网站,直到他们收到新令牌或令牌过期为止。我想强迫用户在会话被禁止或对其级别进行编辑后关闭其会话(销毁JWT令牌)。
我可以在路由中验证每次用户拨打电话时,后端都会在数据库中检查是否禁止该用户。但是我想简化此步骤,以便服务器不会对数据库进行太多调用。我想删除用户的特定令牌,或者一旦该令牌被从网站禁止或其级别已更改,使其无效。因此,用户被迫再次登录并获取新令牌。
是否有一种方法或库可以使我轻松地删除令牌或使其无效?
因为如果我使用我的管理员帐户输入并尝试编辑我的帐户并将其设置为1级,我将无法再次编辑此用户,因为我的等级是1,并且我再次需要等级10才能使用此路由功能,但我可以再次对其进行编辑,因为令牌授权有效且不应发生
答案 0 :(得分:0)
我想强迫用户在其JWT令牌被禁止或对其级别进行编辑后销毁它们。
这是不可能的,用户可以保留您提供给他们的任何数据。
使用令牌可获得的最佳解决方案是使它们的访问令牌的到期时间非常短,并在每次为它们创建新令牌时验证阻止状态和级别。如果您可以接受几分钟的延迟,那么这就是解决方法。
是否有一种方法或库可以使我轻松地删除令牌或使其无效?
您正在寻找普通的HTTP sessions。您根本不会分发带有数据的任何已签名令牌,而是将会话数据存储在服务器端-在ram,额外的缓存或数据库中。从那里可以清除它以使会话无效并注销用户,或更改其访问状态。
每个服务器生态系统都有一个标准实现。不要在每个路由上都通过数据库请求自己实现,而要使用express-session
之类的中间件解决方案(请参阅How to use session variable with NodeJs?)。