Node.js 处理JWT验证失败

Node.js 处理JWT验证失败,node.js,express,authentication,cookies,jwt,Node.js,Express,Authentication,Cookies,Jwt,我希望能够更改JWT密钥,并且不会导致登录用户出现浏览器错误 当前,如果用户已登录并且JWT密钥已更改,则其浏览器将抛出错误。这只能通过用户从浏览器中手动删除cookie来解决 server.express.use((req, res, next) => { const { token } = req.cookies; if (token) { const { userId } = jwt.verify(token, process.env.APP_SECRET);

我希望能够更改JWT密钥,并且不会导致登录用户出现浏览器错误

当前,如果用户已登录并且JWT密钥已更改,则其浏览器将抛出错误。这只能通过用户从浏览器中手动删除cookie来解决

server.express.use((req, res, next) => {
  const { token } = req.cookies;
  if (token) {
    const { userId } = jwt.verify(token, process.env.APP_SECRET);
    req.userId = userId;
  }
  next();
});

我可以向上面的代码中添加什么,以便在jwt.verify失败时,用户被迫再次登录,从而根据新的jwt密钥设置新的cookie?

使用try-catch块并发送res.status,而不是if语句。如果出现前端错误,请再次推送登录页面

try {
    const { userId } = jwt.verify(token, process.env.APP_SECRET);
    req.userId = userId;
    next()
} catch(err) {
  req.redirect("/login_page")
  res.status(400);
}

您可以使用回调来处理verify faliure,并在verify失败时重定向。 你可以使用下面的方法


    jwt.verify(token, process.env.APP_SECRET, (err,userId) => {
                if(err)
          res.send({msg:"your_redirect_loaction_for_login_the_user_again"})
                } else {
                 // user verified
                 req.userId = userId
                }
            })