错误:secretOrPrivateKey 必须有值

新手上路,请多包涵

我正在使用 jwt 创建令牌,但是当我通过邮递员登录时,我从控制台收到错误“错误:secretOrPrivateKey 必须有一个值”。我附上了我的登录代码。请任何可以帮助我的人

exports.login = (req, res, next) => {
  User.findOne({
    where: {
      email: req.body.email
    }
  })
    .then(user => {
      if (!user) {
        return res.status(401).json({
          message:
            "Auth failed!! either the account does't exist or you entered a wrong account"
        });
      }
      bcrypt.compare(req.body.password, user.password, (err, result) => {
        if (err) {
          return res.status(401).json({
            message: "Auth failed",
            token: token
          });
        }
        if (result) {
          const token = jwt.sign(
            {
              email: user.email,
              password: user.id
            },
            process.env.JWT_KEY,
            {
              expiresIn: "1h"
            }
          );

          res.status(200).json({
            message: "Auth granted, welcome!",
            token: token
          });
        }
      });
    })
    .catch(err => {
      console.log(err);
      res.status(500).json({
        error: err
      });
    });
};

这是我的 env.json 文件

{
    "env":{
        "MYSQL":"jllgshllWEUJHGHYJkjsfjds90",
        "JWT_KEY": "secret"
    }
}

在此处输入图像描述

在此处输入图像描述

原文由 mchomvu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

看起来您的应用程序无法正确读取环境变量。

我不知道您使用哪个包来加载环境变量,但最简单的方法是使用 dotenv 包。

使用 npm i dotenv 安装后,尽早将其导入应用程序主文件,如下所示:

 require("dotenv").config();

使用此内容在应用程序根文件夹中创建 .env 文件(如您所见,格式为 key=value)

 MYSQL=jllgshllWEUJHGHYJkjsfjds90
JWT_KEY=secret

然后您可以像以前一样访问它们的值:

 process.env.JWT_KEY

.env 文件:

在此处输入图像描述

原文由 SuleymanSah 发布,翻译遵循 CC BY-SA 4.0 许可协议

删除 process.env.JWT_SECRET_KEY 并按以下方式执行: ${process.env.JWT_SECRET_KEY} 用反引号将其包装起来。它为我解决了问题。

原文由 Rabo Yusuf 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏