前端
uni.request({
url: httpUrl +'/varifoToken',
method:'POST',
data: {
token
},
success: res => {
console.log(res);
if(res.data.code == 200 && res.data.msg == 'token有效'){
console.log('进入首页');
uni.switchTab({
url: `/pages/index/index`
});
}else if(res.data.msg == '请重新登录'){
console.log('进入登录页面');
that.getOpenid()
that.redirectToLogin()
}
},
fail: err => {
}
})
node后端
const { sign, verify,TokenExpiredError ,JsonWebTokenError} = require('jsonwebtoken')
//检验token是否过期的函数
function isExpired(exp) {
// 获取当前时间 当前时间戳秒
const now = Date.now()/1000;
// 对比是否过期
return exp < now
}
varofyToken(req,res){
const token = req.body.token
try{
const decoded = verify(token, secretKey)
const {phone,openid,exp} = decoded
console.log(decoded);
dbpool.connect('SELECT * FROM user where openid = ?',[openid],(err,data)=>{
if(!err){
console.log('############');
console.log(data.length);
//验证openid是否在数据库中
if(data.length>0&&data[0].openid == openid){
// 检查过期
if (isExpired(exp)) {
throw new Error('Token expired')
}
res.status(200).json({
code: 200, //'
msg: 'token有效'
})
}else{
res.status(200).json({
code: 404, //'
msg: '请重新登录'
})
}
}else{
console.log('数据库出错啦');
res.status(200).json({
code: 500, //token失效'
msg: '服务器出错啦'
})
}
})
}catch(err){
console.log(err);
if (err instanceof TokenExpiredError) {
// JWT 过期错误
// throw new Error('Token expired');
res.status(200).json({
code: 1002, //token失效'
msg: '请重新登录'
})
}else {
// 其他验证错误
res.status(200).json({
code: 1001, //token不合法'
msg: '请重新登录'
})
}
}
},