node.js - jwt token 如何确保数据库更改时更新有效负载

标签 node.js reactjs jwt express-jwt

我对 JWT token 类型身份验证的概念有疑问。 因此,假设我在用户登录后签署了 jwt token , token 有效负载包含用户名和 userRole。然后,我将 token 返回给用户并存储在用户的 localStorage 中。

现在,如果我更改数据库中的用户角色,即从普通用户更改为管理员用户,如何确保用户 localStorage 上的有效负载也发生变化?

如果用户是管理员用户,当他登录时,jwt 会存储在他的 localStorage 中,我遇到一个问题。之后,我将他的角色设置为普通用户,他仍然可以访问管理功能,因为他的 localStorage 包含 AminUser 的角色。

有人可以建议一种正确的方法来实现授权,以便在用户端更新 token 吗? 谢谢。

最佳答案

更改用户授权的触发因素是什么?如果您说您正在打开数据库客户端(例如 MySQL 或 PostgreSQL)并手动更改用户的授权,那么您的服务器或客户端无法知道该更改(至少据我所知),并且它们无法对该特定更改使用react。

如果您的触发器是用户发送的某些请求,例如注销更改授权,那么您应该使用该特定请求的新 token 进行响应并存储它,很简单。

如果您的触发器与您的客户端无关,并且它以某种方式发生在您的服务器端,那么您应该在服务器和客户端之间打开一个套接字,并将该更改从服务器发送到客户端。

这样您就可以确保客户端始终是最新的。

但这仍然不够,因为是的,您要让客户端保持最新状态,但是如果他保存 token 并在您更新后替换它怎么办?即使您告诉他们他们只是普通用户,他/她仍然可以访问管理功能。为此,您需要验证任何用户发出的每个请求,并首先检查他们是否被允许发出该请求。

关于node.js - jwt token 如何确保数据库更改时更新有效负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58910676/

相关文章:

jwt - 所有 JWT 有效负载 key 都被视为声明吗

javascript - 如何将 JWT 保存到 localStorage

javascript - 在 javascript/node js 中使用 regExp 拆分字符串并获取数组

Node.js:是否有部署模块可以合并 javascript 文件并缩小它们?

javascript - 直接修改state然后调用setState是不是更快?

javascript - 输入元素在 React 中未更新

javascript - 在命令提示符下安装 npm

node.js - 尝试实现 Node js Multimap 时出现问题

mysql - 容器化服务器应用程序无法连接到 MySQL 数据库

ios - 解码动态接收的输出,因为 JWT 在 Swift 3 中不工作。 "The Token is not yet valid (not before claim)"