如何验证JWT是否仍然有效?

时间:2018-09-12 22:12:57

标签: node.js reactjs jwt

我想每隔X分钟从客户端拨打一次电话,以查看JWT是否仍然有效。我不确定如何在nodeJS中执行此操作。如果我已经被授权,如何检查我是否仍被授权。

4 个答案:

答案 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,则仅当您将其用于公共内容时,此代码才可以。 因为向用户显示此请求是否有效,否则显示原因。 我使用它只是为了了解对象是否由于其他原因仍然可用。 (也可以公开)