node.js - 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,
});
}
);
}
解决方案
推荐阅读
- ruby-on-rails - 未定义的方法`price_workshops_attributes' - Ruby on rails
- python - 如何按升序排列 Z3 生成的模型中的值?
- swift - 即使将 Json 附加到数组中,数组也会打印空白
- powershell - Powershell 哈希表调用外部命令
- ios - 如何将启动屏幕状态栏颜色设置为白色?
- html - 删除表格中两行小按钮之间的空格
- regex - 用 CL-PPCRE 匹配行尾
- spring - HttpSecurity 配置不适用于 Spring 上的 Keycloak 适配器
- python - for 循环执行
- python - 导入脚本时如何在函数之间传递变量,sense self.function 在导入代码时不起作用