我收到了使用Password-JWT进行身份验证的错误

时间:2018-03-23 01:21:47

标签: javascript express

我发现这个奇怪的错误使用Password-Jwt进行身份验证,我对此有点新意,所以任何帮助都会非常感激。 passport.js文件:

         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.user(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);
        }
        });
     });
     }

我收到了这个错误:

this._secretOrKeyProvider = options.secretOrKeyProvider;                                         ^

  

TypeError:无法读取未定义的属性'secretOrKeyProvider'       在新的JwtStrategy(/home/mostfaubuntu/Desktop/desktop/MEAN_APP_PROJECT/node_modules/passport-jwt/lib/strategy.js:33:41)       在module.exports(/home/mostfaubuntu/Desktop/desktop/MEAN_APP_PROJECT/config/passport.js:10:19)       在对象。 (/home/mostfaubuntu/Desktop/desktop/MEAN_APP_PROJECT/app.js:34:29)       在Module._compile(module.js:652:30)       在Object.Module._extensions..js(module.js:663:10)       在Module.load(module.js:565:32)       在tryModuleLoad(module.js:505:12)       在Function.Module._load(module.js:497:3)       在Function.Module.runMain(module.js:693:10)       在启动时(bootstrap_node.js:188:16)

1 个答案:

答案 0 :(得分:0)

所以你必须使用new JwtStrategy(opts, callbackFunction)

查看文档中的示例用法。

passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    User.findOne({id: jwt_payload.sub}, function(err, user) {
        if (err) {
            return done(err, false);
        }
        if (user) {
            return done(null, user);
        } else {
            return done(null, false);
            // or you could create a new account
        }
    });
}));