react中关于token的两个场景

[复制链接]
发表于 2026-1-30 14:59:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
场景一

在react项目中,路由跳转前需判定是否存在token,有则正常跳转,没有则去登录页面。
实现

这里使用的是localstorage存储token(也可以使用redux管理token)
  1. // src\components\AuthRoute.js
  2. // 封装高阶组件
  3. // 有token正常跳转 无token去登录页
  4. import { Navigate } from 'react-router-dom'
  5. export function AuthRoute({ children }) {
  6.     const token = localStorage.getItem('userToken_key')
  7.     if (token) {
  8.         return <>{ children}</>
  9.     } else {
  10.         return <Navigate to={'/login'} replace />
  11.     }
  12. }
复制代码
  1. // src\router\index.js
  2. import Login from '../page/Login'
  3. import Layout from '../page/Layout'
  4. import { createBrowserRouter } from 'react-router-dom'
  5. import { AuthRoute } from '../components/AuthRoute'
  6. const router = createBrowserRouter([
  7.     {
  8.         path: '/login',
  9.         element:<Login/>
  10.     },
  11.     {
  12.         path: '/',
  13.         element:<AuthRoute><Layout/></AuthRoute>
  14.     }
  15. ])
  16. export default router
复制代码
场景二

对于每个axios哀求,都必要在header添加上token数据。
实现

为实现上述场景,直接在axios的哀求拦截器中写如下代码:
  1. //请求拦截器
  2. instance.interceptors.request.use(
  3.   (config) => {
  4.     const token=localStorage.getItem('userToken_key')
  5.     if (token) {
  6.       config.headers.Authorization = `Bearer ${token}`
  7.     }
  8.     return config
  9.   },
  10.   (err) => Promise.reject(err)
  11. )
复制代码
留意:在axios拦截器中无法使用react中的hook(以use开头的函数被称为hook),以是无法使用useSelector拿到store中的token数据。

如果本文对你有资助,盼望能得到你的点赞或收藏或关注,这是对我最好的鼓励;
如你有题目或迷惑,接待在批评区写下,必将积极解答;
如本文有误区,盼望你不吝见教,让我们共勉!
 

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表