reactjs - 如何使用 Redux 在前端实现身份验证?
问题描述
我想知道前端的身份验证过程(如何以及在哪里保存令牌,如何检查用户是否已登录等),重定向到登录页面,当他们尝试访问需要登录的页面时等等。
我不想要这个的实现,只是图书馆来帮助我,如果保存令牌之类的东西,我在哪里保存它?
我目前正在学习 Redux 并且知识很少,我也看到了一篇关于 Saga 的文章,它似乎对这个身份验证过程很有用。
至于后端,我基本上需要安装一些 Django 扩展,并且我将拥有一些端点,例如:输入用户名/密码并返回访问令牌、使访问令牌过期、注册用户、重置密码等。
现在我知道我需要 Redux 并使用 react-router 的 Provider 和 Router。还有关于动作、reducers、store 等的基础知识。但仅此而已。
重要提示:我打算使用钩子而不是类组件。
解决方案
简短说明:
我建议您使用 JWT 进行身份验证,您应该将令牌保存在 localStorage
当您登录/注册服务器响应一个 jwt 令牌时:
localStorage.setItem('usertoken', token)
然后你应该检查用户身份验证:
const isAuth = localStorage.getItem('usertoken')
如果你使用 react-router-4:
if (!isAuth) {
return <Router render={() => <Redirect to="/login" />}
}
// ...your protected routes
此外,每个 api 请求都应在 api.js 文件中包含一个 jwt-token:
const apiResponse = await fetch(url, {
...someOptions,
headers: { 'x-access-token': localStorage.getItem('usertoken') }
})
如果服务器返回 401 响应,您应该删除令牌:
if (response.status === 401) {
localStorage.removeItem('usertoken');
window.location.href = '/login';
}
auth 使用 cookie 的另一种方法
推荐阅读
- c# - 如何获得每个 item2 & item3 组合的最大日期时间?
- node.js - 在 Node.js 中写入关于发布请求的数据
- google-bigquery - 如何提高 BigQuery 的频繁读取?
- vb.net - 使用 VB.NET 在网格中动态创建复选框时,不会出现在 UI 上
- regex - 如何在 grep -P '(?!.*//)word' 中转义 / char 以转义评论
- java - 如果年龄低于 50,则更改行颜色
- apache-camel - 两个独立代理上的 Artemis 客户端负载平衡
- python - 如何在单行中输入不同的数据类型?
- java - 使用 mybatis 跨数据库检索值列表
- powershell - 从用户配置文件位置 NTUSER.DAT 读取映射驱动器