您当前的位置:首页 > 网站建设 > javascript
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery | 小程序 |

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

51自学网 2022-02-21 13:39:40
  javascript

这几天项目提测,测试给我提了个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的分享就到这里了,以上代码根据你们项目的情况换成你们的数据

到此这篇关于vue实现token过期自动跳转到登录页面的文章就介绍到这了,更多相关vue token过期自动跳转 内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


下载地址:
vue/react单页应用后退不刷新方案
JavaScript实现点击图片翻转效果
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。