TypeError:JwtStrategy 需要密钥或密钥,在 Windows 上运行但在 Mac 上不运行

Posted

技术标签:

【中文标题】TypeError:JwtStrategy 需要密钥或密钥,在 Windows 上运行但在 Mac 上不运行【英文标题】:TypeError: JwtStrategy requires a secret or key, runs on Windows but not on Mac 【发布时间】:2022-01-16 08:34:26 【问题描述】:

我正在尝试将护照用于我的 javascript 代码。但是,我收到“JwtStrategy 需要秘密或密钥错误”。我正在与我的朋友在这方面进行合作。虽然他的运行良好,但我的却没有,我不知道为什么。他用windows,我用mac,供参考。

我们的 jwt.js 代码:

const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;

var User = require("./models/user");

const opts = 
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = process.env.JWT_SECRET_KEY;

module.exports = new JwtStrategy(opts, async (jwt_payload, done) => 
  const user = await User.findOne(email: jwt_payload.email);
  if (!user) 
    return done(null, false)
  
  return done(null, user);
) 

错误信息:

TypeError: JwtStrategy requires a secret or key
    at new JwtStrategy (/Users/editedUser/Desktop/frods/server/node_modules/passport-jwt/lib/strategy.js:45:15)
    at Object.<anonymous> (/Users/editedUser/Desktop/frods/server/jwt.js:10:18)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (/Users/editedUser/Desktop/frods/server/app.js:9:17)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)

【问题讨论】:

它从环境变量中获取密钥。你的设置好了吗?(JWT_SECRET_KEY) 是的,我将它设置在与服务器文件相同的文件夹中的 .env 文件中。 【参考方案1】:

更新:对我来说这是一个愚蠢的错误(?)。当我保存 .env 文件时,它们是 .crash 格式。它在我的查找器中显示为 .env,但在命令行中显示为

.env.crash

我不得不将其重命名为

mv .env.crash .env

让它工作

【讨论】:

以上是关于TypeError:JwtStrategy 需要密钥或密钥,在 Windows 上运行但在 Mac 上不运行的主要内容,如果未能解决你的问题,请参考以下文章

Sailsjs 基于 jwt 令牌的身份验证示例

NestJS JwtStrategy 使用 configService 传递密钥

NestJs + Passport - JWTStrategy 永远不会被 RS256 令牌调用

NodeJs JWT 护照

Linux配置免密登录

ssh localhost 配置免密登陆仍需要密码的解决方法