前端在登录获取token时,根据后端返回的token过期时间来使token过期并重新登录
设置有效时长token
export const setDateToken = (key, value, expire = 0) => {
expire = parseInt(expire) //时间戳,后端返回的可能是字符串所以这里转成int
let obj = {
data: value, //存储的数据
expire: expire //记录过期时间,单位秒
}
uni.setStorageSync(key, JSON.stringify(obj)) //uniapp设置本地缓存的api
}
获取token
export const getDateToken = (key) => {
let val = uni.getStorageSync(key) //uniapp根据key获取本地缓存的值
if (!val) {
return null
}
val = JSON.parse(val) //上面存入的时候转成了json字符串,这里转成对象
//判断是否过了有效时长
if (val.expire && (Date.now() / 1000 - val.expire) > 0) {
uni.removeStorageSync(key)
uni.removeStorageSync('userInfo')
return null
}
return val.data
}
可以新建一个工具js,并将这两个方法写入,然后在main.js中设置全局
import { setDateToken } from './common/instrument_js.js'
//设置过期token
Vue.prototype.setDateToken = setDateToken
在登录时使用
this.$apis.pswLogin(data).then(res => {
this.setDateToken('token',res.obj.jwt.token,res.obj.jwt.expired_time)
})
然后在封装请求获取token的时候
//不需要token的接口
let unwantedToken = ['/wxapp/user-psw/login','/wxapp/user-vcode/login','/wxapp/user-getcode','/wxapp/agreement']
const token = getDateToken('token');
//检测需要token的接口请求时token是否过期
if(unwantedToken.indexOf(config.url) == -1){
if (!noNull(token)) {
uni.showModal({
title: '提示',
content: '状态信息已过期,请重新登录!',
showCancel: false,
success: function(res) {
if (res.confirm) {
uni.reLaunch({
url: '/pages/login'
})
}
}
});
return
}
}
config.header['Authorization'] = token;