javascript - 在 API 请求的客户端应用程序中存储用户 ID

标签 javascript reactjs express redux jwt

我有一个 Node-Express REST API,我可以在其中向用户 Controller 发出 GET 请求 - /users/:id - 其中 :id 是用户 - id 号码存储在数据库中。我还有一个调用 API 的 React-Redux 客户端应用程序。为了发出请求,客户端应用需要访问用户 ID,但我目前不确定在客户端存储用户 ID 的最佳方式。

对于其他上下文,我的 API 向客户端发送一个 JWT token在持有用户 ID 的登录时;客户端应用程序将 token 保存在 localStorage 中。当客户端发出请求时,API 会验证解码 token 中的用户 ID 是否与 URL 中包含的 ID 匹配,然后再将响应发送回客户端。

我看到了两个可能的解决方案:

  1. 在客户端解码 JWT token 并使用 token 中存储的用户 ID 进行 API 调用。我认为这是一个潜在的安全风险,因为我相信我需要将 secret 存储在客户端应用程序上。此外,任何拥有 token 的人都可以访问用户的信息。
  2. API 在身份验证时发送用户 ID,客户端将其存储在 localStorage 中。 (我认为将它存储在 Redux 存储中是行不通的,因为用户可以刷新,清除用户 ID 的状态)。我的感觉是这不是最佳实践,因为我没有看到很多其他客户端应用程序采用这种方法。

两者中哪一个是更好的解决方案,或者是否有其他我没有考虑的方法?

最佳答案

您对选项 #1 的看法是正确的。 切勿在客户端解码 token 。这将需要客户端代码知道“ secret ”,这会将它暴露给任何通过您的 Javascript 查看的人。

选项 #2 很好,假设您仍然出于安全目的在每个请求中发送 token 。对于存储,是的,您必须将其存储在 cookie 或 localStorage 中,否则正如您所说,它会在刷新时丢失。

要在客户端代码中获取 ID,请让您的客户端代码从 cookie/localstorage 中读取它。有图书馆;例如,react-cookie 读取 cookie。您可以在每次需要访问它时都这样做,或者您可以在初始页面加载期间读取一次,然后将其分派(dispatch)到 Redux 存储中。

关于javascript - 在 API 请求的客户端应用程序中存储用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43957678/

相关文章:

node.js - 使用http和express有什么好处

node.js - Express/Mongoose 使用对象函数作为回调不起作用

javascript - 如何使用 css 元素从 java 添加 url 链接?

javascript - 设置解析对象列表以使用 Angularjs 选择标签

unit-testing - jest 是否会自动恢复测试模块之间的模拟模块?

reactjs - 显示重复图像 - useEffect 问题?

mysql - 联系 MySql 时 Node 连接错误?

Javascript Ajax 上传文件到 Python 后端

javascript - dojox 对话框小部件中 containerNode 的尺寸

javascript - 使用 Reactjs 的 Axios Post 表单