主动校验时间戳, 判断登录是否失效
This commit is contained in:
parent
3c0491662d
commit
1ae46b6387
@ -1,5 +1,5 @@
|
||||
// import { login, logout, getInfo } from '@/api/user'
|
||||
import { getToken, setToken, removeToken } from '@/utils/auth'
|
||||
import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
|
||||
|
||||
// 导入登录api
|
||||
import { getUserInfo, login, getUserDetailInfoById } from '@/api/user'
|
||||
@ -138,6 +138,7 @@ const actions = {
|
||||
const res = await login(data)
|
||||
console.log('将登录页的逻辑移动到 vuex 里面')
|
||||
commit('setToken', res)
|
||||
setTimeStamp()
|
||||
},
|
||||
// 获取用户信息
|
||||
async getUserInfo({ commit }) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
import Cookies from 'js-cookie'
|
||||
|
||||
const TokenKey = 'hr_token' // 设定一个独一无二的key
|
||||
const timeKey = 'hr_timestamp_key' // 设置一个存时间戳的key
|
||||
|
||||
export function getToken() {
|
||||
return Cookies.get(TokenKey)
|
||||
@ -13,3 +14,16 @@ export function setToken(token) {
|
||||
export function removeToken() {
|
||||
return Cookies.remove(TokenKey)
|
||||
}
|
||||
|
||||
// 设置时间戳的函数
|
||||
export function setTimeStamp() {
|
||||
return Cookies.set(timeKey, Date.now())
|
||||
}
|
||||
// 获取时间戳
|
||||
export function getTimeStamp() {
|
||||
return Cookies.get(timeKey)
|
||||
}
|
||||
// 删除时间戳
|
||||
export function removeTimeStamp() {
|
||||
return Cookies.set(timeKey)
|
||||
}
|
||||
|
@ -1,9 +1,12 @@
|
||||
import store from '@/store'
|
||||
import axios from 'axios'
|
||||
import router from '@/router'
|
||||
import { getTimeStamp } from '@/utils/auth'
|
||||
import { Message } from 'element-ui'
|
||||
// import { MessageBox, Message } from 'element-ui'
|
||||
// import store from '@/store'
|
||||
// import { getToken } from '@/utils/auth'
|
||||
const timeout = 1 * 60 * 60 * 60
|
||||
|
||||
// create an axios instance
|
||||
const service = axios.create({
|
||||
@ -12,13 +15,23 @@ const service = axios.create({
|
||||
timeout: 5000 // request timeout
|
||||
})
|
||||
|
||||
// request interceptor // axios的请求拦截器
|
||||
// request interceptor // axios的请求拦截器, 两个参数
|
||||
service.interceptors.request.use(
|
||||
config => {
|
||||
async config => {
|
||||
// 请求拦截器需要token的时候添加token
|
||||
if (store.getters.token && !config.headers.Authorization) { // 有token并且没有请求头
|
||||
// 先判断时间戳是否过期
|
||||
// 如果时间戳已经过期, 1. 退出登录 2. 跳转登录页 3. 拦截剩下的请求
|
||||
// 如果没过期, 给请求头添加token
|
||||
if (checkTimeout()) {
|
||||
await store.dispatch('user/logout')
|
||||
router.push('/login')
|
||||
// debugger
|
||||
return Promise.reject('登录已过期')
|
||||
} else {
|
||||
config.headers.Authorization = `Bearer ${store.getters.token}` // 在请求头添加token
|
||||
}
|
||||
}
|
||||
return config
|
||||
}, err => {
|
||||
Message.error('请求失败')
|
||||
@ -26,6 +39,12 @@ service.interceptors.request.use(
|
||||
}
|
||||
)
|
||||
|
||||
// 校验时间戳函数
|
||||
const checkTimeout = () => {
|
||||
const loginTimeStamp = getTimeStamp()
|
||||
const nowTimeStamp = Date.now()
|
||||
return nowTimeStamp - loginTimeStamp > timeout
|
||||
}
|
||||
// response interceptor
|
||||
// service.interceptors.response.use(
|
||||
// /**
|
||||
|
Loading…
x
Reference in New Issue
Block a user