我想知道人们通常如何使用 redux 处理用户身份验证?我正在使用 Redux Router 并且我有一个后端 Rails API,它通过 auth token 处理用户身份验证。
当用户提交登录表单时,api 将返回授权 token 以用于后续请求。最初我只是将该授权 token 存储在单个状态树中,每次我发送一个需要发出需要用户身份验证的 API 请求的操作时,我使用 (dispatch, getState) 来获取该授权 token ,然后将其包含在 API 中要求。所以:getState().currentUser.auth_token。
我不确定我是否以正确的方式处理这个问题。是否有人将 localStorage 与 Redux 一起用于用户身份验证来模拟服务器端 session ?然后每次发出 API 请求时,我只检查本地存储中的授权 token ,如果它存在,用户是否已登录?
我最终做的是使用 js-cookies 并在用户通过身份验证时执行 Cookie.set。我的根<App />
component 然后有一个 componentDidMount 调度一个 initAuth() Action 来检查当前的 Cookie 以查看它是否仍然有效。如果是这样,它将使用户保持登录状态,否则它将身份验证缩减器重置为其默认状态。
这是带有用户身份验证的存储库链接:https://github.com/SpencerCDixon/Kira/blob/master/client/actions/AuthActions.js
任何提示或资源将不胜感激。到目前为止,我已经看过真实世界的示例和 React Router 身份验证示例。 React Router 示例似乎使用了 localStorage,这就是为什么我很好奇它是否是正确的路径。我注意到还有一个 Redux Localstorage npm 包。
很想知道我是否不小心让自己暴露在某种身份验证攻击之下,或者是否有更好的方法来处理此流程!
最佳答案
I was wondering how people normally handle User Authentication with redux?
我在很多项目中都遇到过这种情况,最终我得到了一个解决方案,每次我需要在我的 React/Redux 应用程序中处理身份验证时,它都不会让我大汗淋漓。
在我的项目中,我使用的是 Node.js,但这不会改变任何东西,您可以使用任何服务器端技术。
解决方案
我注意到在单页应用程序 (SPA) 中,身份验证机制是在客户端处理的,就像你说的那样,检查用户是否有 token ,用服务器验证它,然后“重定向”到基于此的相关路线,现在无论您是在 SPA 中使用 React/Redux、Angular、Ember 还是 Backbone 都不重要,它总是会变得令人讨厌。
所以我将身份验证(注册/登录)过程从主应用程序中分离出来,这样当用户第一次启动我的应用程序时,服务器会检查 token
cookie,如果用户在请求中有那个 cookie,服务器验证这个 token ,如果它是有效的,将客户端重定向到主应用程序页面(例如 index.html),如果 token 无效或不存在,服务器重定向客户端到登录/注册页面 (login.html/signup.html)。
login.html
页面不是主应用程序的一部分(index.html 中的那个),事实上,它有不同的代码库(更轻,代码更少,因此页面可以加载速度更快)并且当用户尝试登录时,服务器会验证来自该 login.html 页面的用户名和密码,如果它是有效的凭据,则服务器会为此设置一个 token
cookie用户并将他重定向到主应用程序页面 (index.html),应用程序代码可以在其中加载而无需处理身份验证,因为如果用户能够加载此页面 (index.html),则意味着他必须有一个有效 token 。
关于javascript - 通过 Redux 和 Redux 路由器处理用户身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160157/