- 第一种方法:定时刷新token
import { calcDate } from '@/util/date.js'
import { getStore } from '@/util/store.js'
created() {
//实时检测刷新token
this.refreshToken()
},
methods: {
// 方法
refreshToken() {
this.refreshTime = setInterval(() => {
const token = getStore({
name: 'token',
debug: true
})
const date = calcDate(token.datetime, new Date().getTime())
if (validatenull(date)) return
if (300 < date.seconds && date.seconds < 600 && !this.refreshLock) {
this.refreshLock = true
this.$store
.dispatch('RefeshToken')
.then(() => {
this.refreshLock = false
})
.catch(() => {
this.refreshLock = false
})
}
}, 10000)
}
}
- 第二种方法:每次请求响应中去刷新token
import { calcDate } from '@/util/date.js'
import { getStore } from '@/util/store.js'
// 用于判断是否刷新
window.isReresh = false
...
//HTTPresponse拦截
axios.interceptors.response.use(
res => {
if (store.getters.token) {
const token = getStore({
name: 'token',
debug: true
})
const date = calcDate(token.datetime, new Date().getTime())
if (date.seconds < 600 && !window.isReresh) {// 小于10分钟则刷新token
window.isReresh = true
store
.dispatch('RefeshToken')
.then(() => {
window.isReresh = false
})
.catch(() => {
window.isReresh = false
})
}
}
return res
},
error => {
// 请求超时处理
if (error.message) {
if (error.message.indexOf('timeout') !== -1) {
Message({
message: '请求超时,请重新刷新页面!',
type: 'error'
})
}
}
if (axios.isCancel(error)) {
console.log('repeated request: ' + error.message)
}
return Promise.reject(new Error(error))
}
)
...
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/64806.html