首页 > 解决方案 > NODE JS、PM2 和 Nginx - 创建 JWT 令牌时出现 502 Bad Gateway

问题描述

所以我有一个 NODE JS 应用程序,它具有简单的登录和注册身份验证。如果我npm start在服务器上运行它,一切正常。如果我在pm2 start script_name.js注册时运行它,成功(例如创建用户)和错误(例如用户已经存在),登录适用于错误(例如无效密码),但在登录成功时,我得到一个 502 Bad gateway Nginx。

经过进一步检查,我得出结论,问题部分出在我生成令牌的地方:

if (result) {
  const token = jwt.sign(
    {email: user[0].email, userId: user[0]._id},
    process.env.JWT_KEY,
    { expiresIn: "1h"},
  );

  return res.status(200).json({
    message: "Auth successful",
    token: token,
  });
}

我将该代码更改为:

if (result) {
  return res.status(200).json({
    message: "Auth successful",
  });
}

...仅用于测试目的-它起作用了。

有谁知道可能是什么问题?为什么创建令牌会破坏应用程序?

解决方案编辑 13.08.2021。

JWT 签名是异步过程,并且有一个可用的回调,因此解决方案是在回调中发送 200 状态:

if (result) {
  const token = jwt.sign(
    { email: user[0].email, userId: user[0]._id },
    process.env.JWT_KEY,
    { expiresIn: "1h" },
    function (err, token) {
      return res.status(200).json({
        message: "Auth successful",
        token: token,
      });
    }
  );
}

标签: node.jsnginxjwtpm2

解决方案


推荐阅读