express-jwt 未访问 .env 变量

问题描述 投票:0回答:1

我有

dotenv
jsonwebtoken
express-jwt
套餐。

当我使用

jsonwebtoken
创建令牌时,会找到 env 变量并按预期工作:

...
  const token = jwt.sign({ _id: user._id }, process.env.JWT_SECRET, {
            expiresIn: "7d",
        });
    ...

但是,当我使用带有以下代码的express-jwt包时:

router.get(
    "/current-user",
    expressjwt({
        secret: process.env.JWT_SECRET,
        algorithms: ["HS256"],
    }),
    currentUser
);

我收到以下错误:

RangeError: express-jwt: `secret` is a required option

我可以通过对秘密字符串进行硬编码来解决该错误,如下所示:

...
secret: "mySuperSecret",
...

硬编码字符串是官方文档中显示的内容;显然,这不是一个现实的解决方案。

我在多个地方成功使用了 .env 变量(端口、数据库、签名令牌)。

为什么 .env 变量没有被这个包或这个选项选取?

node.js environment-variables express-jwt
1个回答
0
投票

尝试在反引号中传递

process.env.JWT_SECRET
,这样它将将该值作为字符串传递。这对我有用。

expressJWT({
    secret: `${process.env.JWT_SECRET}`,
    algorithms: ["HS256"],
    userProperty: "auth",
});
© www.soinside.com 2019 - 2024. All rights reserved.