阅读 110

token过期自动跳转到登录页面

这几天项目提测,测试给我提了个bug,说token过期,路由应该自动跳转到登陆页面,让用户重新登录。先说下一些前置条件, 1:我公司的token时效在生产环境设置为一个小时,当token过期,所有接口都直接返回 2:每次路由跳转都会对token进行判断,设置了一个全局的beforeEach钩子函数,如果token存在就跳到你所需要的页面,否则就直接跳转到登录页面,让用户登录重新存取token

接口返回的信息 { code:10009, msg:'token过期', data:null } 全局的路由钩子函数 router.beforeEach(async(to, from, next) => { //获取token   // determine whether the user has logged in   const hasToken = getToken()   if (hasToken) {   //token存在,如果当前跳转的路由是登录界面     if (to.path === '/login') {       // if is logged in, redirect to the home page       next({ path: '/' })       NProgress.done()     } else {     //在这里,就拉去用户权限,判断用户是否有权限访问这个路由     } catch (error) {           // remove token and go to login page to re-login           await store.dispatch('user/resetToken')           Message.error(error || 'Has Error')           next(`/login?redirect=${to.path}`)           NProgress.done()         }   } else {     //token不存在     if (whiteList.indexOf(to.path) !== -1) {     //如果要跳转的路由在白名单里,则跳转过去       next()     } else {     //否则跳转到登录页面       next(`/login?redirect=${to.path}`)       NProgress.done()     }   } }) 复制代码

所以我直接在对所有的请求进行拦截,当响应的数据返回的code是10009,就直接清空用户信息,重新加载页面。我对代码简化了下,因为用户在登录时就会把token,name以及权限信息存在store/user.js文件里,所以只要token过期,把user文件的信息清空。这样,在token过期后,刷新页面或者跳转组件时,都会调用全局的beforeEach判断,当token信息不存在就会直接跳转到登录页面

import axios from 'axios' import { MessageBox, Message } from 'element-ui' import store from '@/store' import { getToken } from '@/utils/auth' const service = axios.create({   baseURL: process.env.VUE_APP_BASE_API,    timeout: 5000  }) //发送请求时把token携带过去 service.interceptors.request.use(   config => {     if (store.getters.token) {       config.headers['sg-token'] = getToken()     }     return config   },   error => {     console.log(error)     return Promise.reject(error)   } ) service.interceptors.response.use(   response => {     console.log(response.data)     const res = response.data     // token过期,重返登录界面     if (res.code === 10009) {       store.dispatch('user/logout').then(() => {         location.reload(true)       })     }     return res   },   error => {     console.log('err' + error) // for debug     Message({       message: error.msg,       type: 'error',       duration: 5 * 1000     })     return Promise.reject(error)   } ) export default service 复制代码

好啦,关于token的分享就到这里了,以上代码根据你们项目的情况换成你们的数据,有错误欢迎指出来!


作者:阿狸要吃吃的
链接:https://juejin.cn/post/6947970204320137252


文章分类
前端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐