欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue實現(xiàn)token過期自動跳轉(zhuǎn)到登錄頁面

 更新時間:2021年10月18日 09:40:18   作者:阿貍要吃吃的  
本文主要介紹了vue實現(xiàn)token過期自動跳轉(zhuǎn)到登錄頁面,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

這幾天項目提測,測試給我提了個bug,說token過期,路由應(yīng)該自動跳轉(zhuǎn)到登陸頁面,讓用戶重新登錄。先說下一些前置條件,

1:我公司的token時效在生產(chǎn)環(huán)境設(shè)置為一個小時,當token過期,所有接口都直接返回
2:每次路由跳轉(zhuǎn)都會對token進行判斷,設(shè)置了一個全局的beforeEach鉤子函數(shù),如果token存在就跳到你所需要的頁面,否則

就直接跳轉(zhuǎn)到登錄頁面,讓用戶登錄重新存取token

接口返回的信息

{
 code:10009,
 msg:'token過期',
 data:null
}

全局的路由鉤子函數(shù)

router.beforeEach(async(to, from, next) => {
//獲取token
  // determine whether the user has logged in
  const hasToken = getToken()

  if (hasToken) {
  //token存在,如果當前跳轉(zhuǎn)的路由是登錄界面
    if (to.path === '/login') {
      // if is logged in, redirect to the home page
      next({ path: '/' })
      NProgress.done()
    } else {
    //在這里,就拉去用戶權(quán)限,判斷用戶是否有權(quán)限訪問這個路由
    } 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) {
    //如果要跳轉(zhuǎn)的路由在白名單里,則跳轉(zhuǎn)過去
      next()
    } else {
    //否則跳轉(zhuǎn)到登錄頁面
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})

所以我直接在對所有的請求進行攔截,當響應(yīng)的數(shù)據(jù)返回的code是10009,就直接清空用戶信息,重新加載頁面。我對代碼簡化了下,因為用戶在登錄時就會把token,name以及權(quán)限信息存在store/user.js文件里,所以只要token過期,把user文件的信息清空。這樣,在token過期后,刷新頁面或者跳轉(zhuǎn)組件時,都會調(diào)用全局的beforeEach判斷,當token信息不存在就會直接跳轉(zhuǎn)到登錄頁面

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 
})
//發(fā)送請求時把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

好啦,關(guān)于token的分享就到這里了,以上代碼根據(jù)你們項目的情況換成你們的數(shù)據(jù)

到此這篇關(guān)于vue實現(xiàn)token過期自動跳轉(zhuǎn)到登錄頁面的文章就介紹到這了,更多相關(guān)vue token過期自動跳轉(zhuǎn) 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論