马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
场景一
在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数据。
如果本文对你有资助,盼望能得到你的点赞或收藏或关注,这是对我最好的鼓励;
如你有题目或迷惑,接待在批评区写下,必将积极解答;
如本文有误区,盼望你不吝见教,让我们共勉!
|