【前言】 路由守卫是很重要的一个功能点,只有在登录注册的状态下才能进入网站内部
token过期处理
在成功登陆以后,如果想要访问有token权限的接口,则需要在请求拦截和响应拦截中再进行处理
请求拦截处理
在请求拦截中,添加统一的请求头
// 请求拦截
axios.interceptors.request.use(config => {
startLoading()
// 设置统一的请求头:如何配置访问有token的接口
if (localStorage.token) {
config.headers.Authorization = localStorage.token
}
return config
}, error => {
return Promise.reject(error)
})
响应拦截处理
如果返回的接口数据中,状态码未401,说明token过期或失效,则需要清除浏览器中缓存的token
// 响应拦截
axios.interceptors.response.use( response => {
endLoading()
return response
}, error => {
endLoading()
Message.error(error.response.data)
// 获取错误状态码,token失效
const { status } = error.response
if (status == 401) {
Message.error('token失效,请重新登录')
// 清除token
localStorage.removeItem('token')
// 重新跳转到login页面
router.push('/login')
}
return Promise.reject(error)
})
路由守卫
想要实现只有在登录或者注册成功的状态下,才能进入系统,这时候就可以使用路由守卫
配置路由守卫
在route.js中进行配置
import Vue from 'vue'
import VueRouter from 'vue-router'
import Index from '../views/Index.vue'
import Register from '../views/Register.vue'
import NotFound from '../views/404.vue'
import { from } from 'core-js/fn/array'
Vue.use(VueRouter)
const routes = [
{
path: '/',
redirect: '/index',
},
{
path: '/index',
name: 'index',
component: Index
},
{
path: '/register',
name: 'register',
component: Register
},
{
path: '*',
name: '/404',
component: NotFound
}
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
// 路由守卫核心代码
router.beforeEach((to,from,next) => {
// 先判断浏览器中是否已经有token了,有则true,否则false
const isLogin = localStorage.token ? true : false
//然后判断要去往的页面,如果是去往login和register页面的,就直接放行
//如果不是去往login和register页面,则判断有没有token,如果有token就放行,否则就跳转login页面
if (to.path == '/login' || to.path == '/register') {
next
}else {
isLogin ? next() : next('/login')
}
})
export default router
————————————————
智一面|前端面试必备练习题