广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue实现token过期自动跳转到登录页面
  • 841
分享到

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

2024-04-02 19:04:59 841人浏览 八月长安
摘要

这几天项目提测,测试给我提了个bug,说token过期,路由应该自动跳转到登陆页面,让用户重新登录。先说下一些前置条件, 1:我公司的token时效在生产环境设置为一个小时,当to

这几天项目提测,测试给我提了个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过期自动跳转 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: vue实现token过期自动跳转到登录页面

本文链接: https://www.lsjlt.com/news/154662.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作