【发布时间】:2017-08-16 04:15:20
【问题描述】:
我正在开发一个基于 Node / Express 的 REST API 和一个基于 React / Redux 的前端。用户可以登录(这使他们可以访问其他功能),但他们也可以在不登录的情况下使用基本功能。
当用户登录时,客户端使用凭据进行 HTTP 调用,服务器创建会话并返回用户对象(user_id 和一些其他数据)以及会话 cookie。 React 应用程序将用户对象保存在其 Redux 状态。在随后的 HTTP 调用中,用户通过 cookie 进行身份验证。
在渲染用户界面时,React 应用程序通过检查其状态中的用户对象来确定它是否已登录。这用于使某些仅对登录用户可用的按钮变灰,或在用户已登录时隐藏登录链接。
问题
会话可能会过期,或者用户在不同的浏览器选项卡中注销。 React 应用无法知道这一点,并认为它仍然处于登录状态(即应用状态与现实不匹配),从而导致错误的 UI 显示。
什么模式可以解决这个问题?
- 在所有 Ajax 调用上添加一个钩子以检查 401 并更新 州?
- 在 HTTP 标头中返回会话状态(然后?)
- 服务器通知客户端它已被注销的彗星模式? (那时不再是 REST API)
- 在实际 API 调用之前进行额外调用以确保用户仍处于登录状态? (看起来很浪费)
一旦客户端检测到它在正在进行的操作期间不再登录,如何处理?我更愿意在一个地方处理这个问题,而不是所有函数都进行 API 调用......
非常感谢您提供一些最佳做法!
【问题讨论】:
-
为什么不只检查 cookie 或将 expires 属性添加到您的状态?无论如何,您还想检查 401 错误,因为您永远无法保证 cookie == 已验证/工作会话的存在
标签: reactjs session authentication express