当token过期,如何在axios里面用拦截器next()到登陆呢?

发布于 2022-09-07 16:23:49 字数 2707 浏览 13 评论 0

例如 ajax返回 code:1 为正常 ,code :-1 为token过期
如何通过

axios.interceptors.response.use(function (response) { next() } 到 login.vue 呢?

=========================

import Vue from 'vue';
import iView from 'iview';
import Util from '../libs/util';
import VueRouter from 'vue-router';
import {routers} from './router';
import config from '../../build/config';
import axios from 'axios';

Vue.use(VueRouter);

// 路由配置
const RouterConfig = {

routes: routers

};

export const router = new VueRouter(RouterConfig);

router.beforeEach((to, from, next) => {

let apiAuth = sessionStorage.getItem('apiAuth');
iView.LoadingBar.start();
Util.title(to.meta.title);
console.log(to)

// if (sessionStorage.getItem('locking') === '1' && to.name !== 'locking') { // 判断当前是否是锁定状态
//     next({
//         replace: true,
//         name: 'locking'
//     });
// } else if (sessionStorage.getItem('locking') === '0' && to.name === 'locking') {
//     next(false);
// } else {
    if (!apiAuth && to.name !== 'login') { // 判断是否已经登录且前往的页面不是登录页
        next({
            name: 'login'
        });
    } else if (apiAuth && to.name === 'login') { // 判断是否已经登录且前往的是登录页
        Util.title();
        next({
            name: 'home_index'
        });
    } else {
        axios.defaults.baseURL = config.baseUrl;
        axios.interceptors.request.use(function (config) {
            console.log('全局加token')
            config.headers['version'] = 'v1.0'
            if(sessionStorage.getItem('apiAuth')){
                config.headers['user-token'] = sessionStorage.getItem('apiAuth')
            }
            if(sessionStorage.getItem('access-token')){
                config.headers['access-token'] = sessionStorage.getItem('access-token')                   
            }
            
            return config;
        });
        axios.interceptors.response.use(function (response) {
            console.log('%c------response-------',"color: green;")
            console.log(response.data.code)
            if(response.data.code == 1){   // token失效
               router.push({ name: 'login'})
                
            }
            console.log('%c------response-------',"color: green;")
            return response;
          }, function (error) {
            console.error(error)
          });
        Util.toDefaultPage([...routers], to.name, router, next);
    }
// }

});

router.afterEach((to) => {

Util.openNewPage(router.app, to.name, to.params, to.query);
iView.LoadingBar.finish();
window.scrollTo(0, 0);

});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

七婞 2022-09-14 16:23:49

你要的是跳转到登录页面对吧,在 axios 配置的文件中 import vue-router,在其中 使用 router.push(..),或者直接 window.location.href 跳转;

另外,next 是 router hook 的方法,外部无法使用;

温柔嚣张 2022-09-14 16:23:49

import你的路由文件, router.push()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文