我有
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 变量没有被这个包或这个选项选取?
尝试在反引号中传递
process.env.JWT_SECRET
,这样它将将该值作为字符串传递。这对我有用。
expressJWT({
secret: `${process.env.JWT_SECRET}`,
algorithms: ["HS256"],
userProperty: "auth",
});