处理Token失效

本节目标: 能够在响应拦截器中处理token失效

说明:为了能够在非组件环境下拿到路由信息,需要我们安装一个history包

historyoutside.png

实现步骤

  1. 安装:yarn add history
  2. 创建 utils/history.js文件
  3. 在app.js中使用我们新建的路由并配置history参数
  4. 通过响应拦截器处理 token 失效

代码实现

utils/history.js

  1. // https://github.com/remix-run/react-router/issues/8264
  2. import { createBrowserHistory } from 'history'
  3. import { unstable_HistoryRouter as HistoryRouter } from 'react-router-dom'
  4. const history = createBrowserHistory()
  5. export {
  6. HistoryRouter,
  7. history
  8. }

app.js

import { HistoryRouter, history } from './utils/history'

function App() {
  return (
    <HistoryRouter history={history}>
       ...省略无关代码
    </HistoryRouter>
  )
}

export default App

utils/http.js

import { history } from './history'

http.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    if (error.response.status === 401) {
      // 删除token
      clearToken()
      // 跳转到登录页
      history.push('/login')
    }
    return Promise.reject(error)
  }
)