使用Password-JWT认证遇TypeError错误,求Passport.js解决方案
解决Passport-JWT的TypeError: Cannot read property 'secretOrKeyProvider' of undefined问题
嘿,我看到你在入门Passport.js的时候遇到了这个JWT认证的错误,别担心,这是个很常见的参数传递小问题,咱们马上就能搞定!
错误原因分析
你遇到的这个报错,根源在于两个参数传递/方法调用的错误:
- 你用了
passport.user()来注册策略,但正确的方法应该是passport.use() - 实例化
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
相关产品推荐
相关产品推荐

