const TokenKey = 'hdq_token'
const ExpiresKey = 'hdq_token_expires'
const refreshTokenKey = "hdq_refresh_token"
import {
Message
} from 'element-ui'
import {
login
} from "@/api/apiUser"
import $store from "@/store"
import $router from '@/router'
let tokenMsg
export function setToken(token) {
return localStorage.setItem(TokenKey, token)
}
export function getToken() {
return localStorage.getItem(TokenKey)
}
export function setRefreshToken(refresh_token) {
return localStorage.setItem(refreshTokenKey, refresh_token)
}
export function getRefreshToken() {
return localStorage.getItem(refreshTokenKey)
}
export function setExpires(time) {
let now = new Date().getTime()
return localStorage.setItem(ExpiresKey, now + time * 1000)
}
export function removeToken() {
localStorage.removeItem(ExpiresKey)
return localStorage.removeItem(TokenKey)
}
export async function checkToken(notice = true) {
let expires = localStorage.getItem(ExpiresKey)
let currentTime = new Date().getTime()
if (expires) {
expires = parseInt(expires)
if (currentTime >= expires) {
if (!tokenMsg) {
tokenMsg = Message.error({
message: '认证已失效,请重新登录',
showClose: true,
onClose: () => {
tokenMsg = null
}
})
}
localStorage.setItem(TokenKey, '')
$store.dispatch("user/logout").then(() => {
$store.dispatch("setThemeColor", "#0081E4");
$router.push("/login");
});
} else {
if ((expires - currentTime) <= 5 * 60 * 1000) {
let refresh_token = getRefreshToken()
if (refresh_token) {
let res = await login({
refresh_token: refresh_token,
grant_type: 'refresh_token'
})
try {
setToken(`${res.token_type} ${res.access_token}`)
setExpires(res.expires_in)
setRefreshToken(res.refresh_token)
$store.dispatch('user/changeSetting', {
tokenType: res.token_type,
token: res.access_token,
refresh_token: res.refresh_token
})
} catch (error) {
$store.dispatch("user/logout").then(() => {
$store.dispatch("setThemeColor", "#0081E4");
$router.push("/login");
});
}
}
}
}
} else {
return false
}
}