Vue刷新token,判斷token是否過時、失效的最簡便的方法

刷新token和token是否過時的操做都是由後端實現,前端只負責根據code的不一樣狀態來作不一樣的操做:前端

1、判斷token是否過時、失效ios

舉例:通常響應狀態碼 code :0,表示請求成功。①響應狀態碼 code:10010表示token過時 ②響應狀態碼 code:10011 表示token無效。這些狀態碼都由你本身和後端的同窗一塊兒定義。code等於10010和10011這兩種狀態都會跳轉到登陸頁,從新進行登陸並獲取最新的token。axios

2、在必定時間內刷新token後端

爲何須要刷新token?由於出於安全性的考慮,通常是一天或幾個小時更新token,看項目須要。緩存

怎麼實現?我和後端的同窗是這麼定義的,在發送任何一次請求時,若是須要更新token,響應體中後端的同窗給我返回了token這個字段,token出如今了響應體中,說明這時候是須要刷新token的(其餘非刷新token的請求時是沒有token字段的),這時用localStorage保存最新token,自動覆蓋掉原來舊的token,這樣下次再調用新接口時用的就是最新的token了,這樣用戶也感知不到token更新的過程。
安全

 

 3、具體實現session

/**
* 全局變量 和 設置 、配置等。。。
*/
 
import axios from 'axios' // 引入axios
 
import Storage from '@/assets/js/util/storage.js' // storage工具類,簡單的封裝
 
 
 
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'

/* 請求攔截器 */
 
axios.interceptors.request.use(function (config) { // 每次請求時會從localStorage中獲取token
 
    let token = Storage.localGet('token')
 
    if (token) {
    
        token = 'bearer' + ' ' + token.replace(/'|"/g, '') // 把token加入到默認請求參數中
 
        config.headers.common['Authorization'] = token
 
    }
 
    return config
 
}, function (error) {
 
    return Promise.reject(error)
 
})


/* 響應攔截器 */
 
axios.interceptors.response.use(function (response) { // ①10010 token過時(30天) ②10011 token無效
 
if (response.data.code === 10010 || response.data.code === 10011) {
 
    Storage.localRemove('token') // 刪除已經失效或過時的token(不刪除也能夠,由於登陸後覆蓋)
 
    router.replace({
 
        path: '/login' // 到登陸頁從新獲取token
 
    })
 
} else if (response.data.token) { // 判斷token是否存在,若是存在說明須要更新token
 
    Storage.localSet('token', response.data.token) // 覆蓋原來的token(默認一天刷新一次)
 
}
 
    return response
 
}, function (error) {
    return Promise.reject(error)
})

緩存工具類 Storageapp

var Storage = {
    // ==================sessionsTorage設置緩存================
    // 設置緩存
    sessionSet: function (name, data) {
        sessionStorage.removeItem(name)
        sessionStorage.setItem(name, JSON.stringify(data))
    },
    // 獲取緩存
    sessionGet: function (name) {
        return JSON.parse(sessionStorage.getItem(name))
    },
    // 清除緩存
    sessionRemove: function (name) {
        sessionStorage.removeItem(name)
    },
    // ==================localStorage設置緩存==================
    // 設置緩存
    localSet: function (name, data) {
        localStorage.removeItem(name)
        localStorage.setItem(name, JSON.stringify(data))
    },
    // 獲取緩存
    localGet: function (name) {
        return JSON.parse(localStorage.getItem(name))
    },
    // 清除緩存
    localRemove: function (name) {
        localStorage.removeItem(name)
    }
 
}
 
export default Storage
相關文章
相關標籤/搜索