我想每隔X分钟从客户端拨打一次电话,以查看JWT是否仍然有效。我不确定如何在nodeJS中执行此操作。如果我已经被授权,如何检查我是否仍被授权。
答案 0 :(得分:2)
您可以让客户端对JWT进行解码,并检查expiry
字段并将其与系统时间进行比较。
例如
isExpired: (token) => {
if (token && jwt.decode(token)) {
const expiry = jwt.decode(token).exp;
const now = new Date();
return now.getTime() > expiry * 1000;
}
return false;
您可以在客户端使用npm install jsonwebtoken
或其他npm软件包
答案 1 :(得分:2)
处理令牌过期的一种优雅解决方案是,当您设置令牌(在delimiter="; "
或store(redux)或同时设置两者中)时,还具有一个Async函数,该函数在令牌过期时准确地运行。像这样:
LocalStorage
这样,您可以确保当令牌不再有效时,不会记录用户。
答案 2 :(得分:1)
创建并端点验证令牌是否有效。您可以使用jsonwebtoken包。
import jwt from 'jsonwebtoken';
const verifyToken = (req, res) => {
const token = req.headers.authorization;
jwt.verify(token, SECRET_KEY, (err, decoded) => {
if (err) {
return res.status(401).send();
}
// can do something with the decoded data
})
}
router.post('/verify-token', verifyToken);
答案 3 :(得分:-1)
我找到了一个更好的选择,承诺可以检查我的令牌是否有效
jwt.verify(token,key,(err,result)=>{
if(err){
if(err.name == "TokenExpiredError"){
console.log("Expired") //This case is when token expired
}
else{
console.log(err.name) //Any other case
}
}
else{
//Here code for your promise using 'result' when token is Valid
}
})
编辑:如果出于安全原因不使用JWT,则仅当您将其用于公共内容时,此代码才可以。 因为向用户显示此请求是否有效,否则显示原因。 我使用它只是为了了解对象是否由于其他原因仍然可用。 (也可以公开)