解决重复跳转login的bug
This commit is contained in:
+14
-9
@@ -34,7 +34,7 @@ const routes = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
const router = new VueRouter({
|
const router = new VueRouter({
|
||||||
mode: 'history',
|
mode: 'history',
|
||||||
base: process.env.BASE_URL,
|
base: process.env.BASE_URL,
|
||||||
routes
|
routes
|
||||||
})
|
})
|
||||||
@@ -42,15 +42,20 @@ const router = new VueRouter({
|
|||||||
// 路由守卫,当访问需要登录的页面时,检查是否有token,如果没有则跳转到登录页
|
// 路由守卫,当访问需要登录的页面时,检查是否有token,如果没有则跳转到登录页
|
||||||
router.beforeEach((to, from, next) => {
|
router.beforeEach((to, from, next) => {
|
||||||
const token = store.state.token;
|
const token = store.state.token;
|
||||||
if(to.meta.requiresAuth) {
|
if (to.meta.requiresAuth) {
|
||||||
// 加入/login判断,防止vue-router报错
|
// 登录页直接放行
|
||||||
if(!token && to.path !== "/login") {
|
if (to.path === "/login") {
|
||||||
next('/login')
|
next();
|
||||||
return
|
return;
|
||||||
} else {
|
|
||||||
next()
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 其他页面没有 token,不允许进入
|
||||||
|
if (!token) {
|
||||||
|
next("/login");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
next();
|
||||||
} else {
|
} else {
|
||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
|
|||||||
+24
-1
@@ -1,5 +1,27 @@
|
|||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import store from '../store';
|
import store from '../store';
|
||||||
|
import router from '../router';
|
||||||
|
|
||||||
|
let redirectingToLogin = false;
|
||||||
|
|
||||||
|
function redirectToLogin() {
|
||||||
|
if (redirectingToLogin || router.currentRoute.path === '/login') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
redirectingToLogin = true;
|
||||||
|
router.replace('/login').then(
|
||||||
|
() => {
|
||||||
|
redirectingToLogin = false;
|
||||||
|
},
|
||||||
|
(navigationError) => {
|
||||||
|
redirectingToLogin = false;
|
||||||
|
if (navigationError.name !== 'NavigationDuplicated') {
|
||||||
|
console.error(navigationError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// 配置请求
|
// 配置请求
|
||||||
const request = axios.create({
|
const request = axios.create({
|
||||||
@@ -29,9 +51,10 @@ request.interceptors.response.use(
|
|||||||
},
|
},
|
||||||
(error) => {
|
(error) => {
|
||||||
if (error.response && error.response.status === 401) {
|
if (error.response && error.response.status === 401) {
|
||||||
// 如果返回401,说明token过期或无效,清除token
|
// 如果返回401,说明token过期或无效,清除token并跳转到登录页
|
||||||
store.commit('SET_TOKEN', '');
|
store.commit('SET_TOKEN', '');
|
||||||
store.commit('SET_USERNAME', '');
|
store.commit('SET_USERNAME', '');
|
||||||
|
redirectToLogin();
|
||||||
}
|
}
|
||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user