react中关于token的两个场景

场景一

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

实现

这里使用的是localstorage存储token(也可以使用redux管理token)

复制代码
// src\components\AuthRoute.js
// 封装高阶组件
// 有token正常跳转 无token去登录页
import { Navigate } from 'react-router-dom'

export function AuthRoute({ children }) {
    const token = localStorage.getItem('userToken_key')
    if (token) {
        return <>{ children}</>
    } else {
        return <Navigate to={'/login'} replace />
    }
}

// src\router\index.js
import Login from '../page/Login'
import Layout from '../page/Layout'

import { createBrowserRouter } from 'react-router-dom'
import { AuthRoute } from '../components/AuthRoute'

const router = createBrowserRouter([
    {
        path: '/login',
        element:<Login/>
    },
    {
        path: '/',
        element:<AuthRoute><Layout/></AuthRoute>
    }
])

export default router

场景二

对于每个axios请求,都需要在header添加上token数据。

实现

为实现上述场景,直接在axios的请求拦截器中写如下代码:

复制代码
//请求拦截器
instance.interceptors.request.use(
  (config) => {
    const token=localStorage.getItem('userToken_key')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  (err) => Promise.reject(err)
)

注意:在axios拦截器中无法使用react中的hook(以use开头的函数被称为hook),所以无法使用useSelector拿到store中的token数据。

如果本文对你有帮助,希望能得到你的点赞或收藏或关注,这是对我最好的鼓励;

如你有问题或疑惑,欢迎在评论区写下,必将努力解答;

如本文有误区,希望你不吝赐教,让我们共勉!

相关推荐
韭菜炒大葱5 分钟前
TailwindCSS:从“样式民工”到“UI乐高大师”的逆袭
前端·面试·编程语言
whyfail5 分钟前
CSS实现水滴样式
前端·css
C_心欲无痕6 分钟前
vue3 - watchEffect对响应式副作用进行管理
前端·javascript·vue.js
AAA阿giao13 分钟前
赋予大模型“记忆”:深度解析 LangChain 中 LLM 的上下文记忆实现
javascript·langchain·llm
阿星AI工作室13 分钟前
破防了!阿星一年用AI撸了50个项目,这10条避坑经验你必须知道
前端·人工智能
KoalaShane13 分钟前
Web 3D设计[Three.js]关于右键点击Canvas旋转模型,在其他元素上触发右键菜单问题
前端·javascript·3d
借个火er15 分钟前
React 19 源码全景图:从宏观到微观
前端
张清悠17 分钟前
CSS引入外部第三方字体
前端·javascript·css
追逐梦想之路_随笔18 分钟前
手撕Promise,实现then|catch|finally|all|allSettled|race|any|try|resolve|reject等方法
前端·javascript
张较瘦_19 分钟前
前端 | 吃透CSS视觉特效:圆角、渐变、动画与变换核心解析
前端·css