react登录页面的判断token是否存在

1.创建一个高阶函数来判断token是否存在

import { Navigate } from 'react-router-dom'
import { getToken } from '../utile/index'

function AuthComponent({ children }) {
  const isToken = getToken()
  if (isToken) {
    return <>{children}</>
  } else {
    return <Navigate to='/login' replace />
  }
}
export { AuthComponent }

2.封装本地存储token

/ 封装locaStrot存取token
// 设置key属性
const key = 'pc-key'

// 存token
const setToken = (token) => {
  return window.localStorage.setItem(key, token)
}
// 取token
const getToken = () => {
  return window.localStorage.getItem(key)
}
// 清除token
const removeToken = () => {
  return window.localStorage.removeItem(key)
}

export { setToken, getToken, removeToken }

3.在封装的axios请求拦截器中添加token,

请求拦截器
http.interceptors.request.use((config) => {

  // 请求拦截器注入token
  const token = getToken()
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, (error) => {
  return Promise.reject(error)
})

4.创建mobx 文件:

import LoginStore from './login.Store.js'
import React from 'react'

class RootStore {
  constructor() {
    this.loginStore = new LoginStore()
  }
}
const rootStore = new RootStore()
const context = React.createContext(rootStore)
const useStore = () => React.useContext(context)
export { useStore }

 

5.然后再mobx中获取后台数据并赋值变量和存储本地token

import { http } from '../utile/index'
import { makeAutoObservable } from 'mobx'
import { setToken } from '../utile/index.jsx'

class LoginStore {//刷新页面token不会丢失
  token = 'a35cc861-2822-4a9b-a35f-b27fbc1651d2'
  constructor() {
    makeAutoObservable(this)
  }
  setToken = async ({ mobile, code }) => {
    // 调用登录接口
    const res = await http.post('http://geek.itheima.net/v1_0/authorizations', { mobile, code })
    // 获取的后台数据赋值给token
    this.token = res.data.data
    // 把token存到本地存储并传入参数
    setToken(this.token)

  }

}
export default LoginStore

 6.在app.js中导入高阶函索判断首页中是否有token,如果有就正常跳转页面,如果没有就跳转到登录页login

import './App.css';
import { BrowserRouter, Routes, Route } from 'react-router-dom'
import Layout from './pages/Layout'
import Login from './pages/Login'
// 导入token判断的高阶函数
import { AuthComponent } from './component/AuthComponent'

function App() {
  return (
    <div className="App">

      <BrowserRouter>
        <Routes>
          {/* 这个是需要判断token是否存在 */}
          <Route path='/' element={<AuthComponent><Layout /></AuthComponent>}></Route>
          <Route path='/login' element={<Login />}></Route>
        </Routes>
      </BrowserRouter>
    </div>
  );
}

export default App;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值