You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Password-JWT认证遇TypeError错误,求Passport.js解决方案

解决Passport-JWT的TypeError: Cannot read property 'secretOrKeyProvider' of undefined问题

嘿,我看到你在入门Passport.js的时候遇到了这个JWT认证的错误,别担心,这是个很常见的参数传递小问题,咱们马上就能搞定!

错误原因分析

你遇到的这个报错,根源在于两个参数传递/方法调用的错误:

  1. 你用了passport.user()来注册策略,但正确的方法应该是passport.use()
  2. 实例化JwtStrategy时,你把配置对象opts和回调函数分开传给了passport.use,但JwtStrategy的构造函数需要把opts作为第一个参数传入,再把整个策略实例传给passport.use()

修正后的完整代码

const jwtStrategy = require('passport-jwt').Strategy;
const extractJwt = require('passport-jwt').ExtractJwt;
const User = require('../models/user');
const config = require('../config/database');

module.exports = function(passport){
  let opts = {};
  opts.jwtFromRequest = extractJwt.fromAuthHeaderAsBearerToken();
  opts.secretOrKey = config.secret;
  
  // 核心修正点
  passport.use(new jwtStrategy(opts, function(jwt_payload, done){
    User.getUserById(jwt_payload._id, function(err, user){
      if(err){ return done(err, false); }
      if(user){ return done(null, user); }
      else{ return done(null, false); }
    });
  }));
}

关键修改说明

  • 把passport.user()改成passport.use():这是Passport注册认证策略的标准方法,user()并不是Passport提供的API。
  • 把opts直接传入new jwtStrategy()的第一个参数:JwtStrategy的构造函数需要先接收配置对象,再接收验证回调,这样它才能正确读取secretOrKey等配置,避免出现undefined的错误。

这样修改之后,你的JWT认证策略应该就能正常初始化,不会再抛出那个类型错误啦!

内容的提问来源于stack exchange,提问作者Stoufa Gheribi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:40:49