Passport-JWT抛出secretOrKey Provider错误

时间:2018-10-08 02:20:42

标签: node.js jwt passport.js

我正在使用Passport-JWT策略进行身份验证,但是当我们必须提供机密信息时出现错误。这是我到目前为止

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.fromAuthHeader();
opts.secretOrKey=config.secret; 

passport.use(new jwtStrategy(opts,(jwt_payload,done)=>{
    User.getUserById(jwt_payload._id,(err,user)=>{
        if(err) 
        {
            return done(err,false);
        }
        if(user)
        {
            return done(null,user);
        }
        else
        {
            return done(null,false);
        }

    });
}));}

我收到此错误

  

C:\ dev \ mapd713 \ Healthcare项目\ node_modules \ passport-jwt \ lib \ strategy.js:33       this._secretOrKeyProvider = options.secretOrKeyProvider;                                           ^

     

TypeError:无法读取未定义的属性“ secretOrKeyProvider”       在Object.JwtStrategy上[作为策略](C:\ dev \ mapd713 \ HealthCare Project \ node_modules \ passport-jwt \ lib \ strategy.js:33:41)       在对象。 (C:\ dev \ mapd713 \ HealthCare Project \ config \ passport.js:1:107)       在Module._compile(module.js:653:30)       在Object.Module._extensions..js(module.js:664:10)       在Module.load(module.js:566:32)       在tryModuleLoad(module.js:506:12)       在Function.Module._load(module.js:498:3)       在Module.require(module.js:597:17)       在要求时(internal / module.js:11:18)       在对象。 (C:\ dev \ mapd713 \ Healthcare项目\ server.js:35:1)       在Module._compile(module.js:653:30)       在Object.Module._extensions..js(module.js:664:10)       在Module.load(module.js:566:32)       在tryModuleLoad(module.js:506:12)       在Function.Module._load(module.js:498:3)       在Function.Module.runMain(module.js:694:10)

我关注了这个问题,但仍然无法解决问题。我使用的是护照jwt的版本“ ^ 4.0.0”

2 个答案:

答案 0 :(得分:0)

我认为这是主要问题在于我导入 Strategy 作为方法时的 require 语句,但是我认为从2.x版本开始,他们将其更新为我正在使用4.x版本

const jwtStrategy = require('passport-jwt').Strategy; //<--- REMOVE ()
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,(jwt_payload,done)=>{

    User.getUserById(jwt_payload._id,(err,user)=>{
        if(err) 
        {
            return done(err,false);
        }
        if(user)
        {
            return done(null,user);
        }
        else
        {
            return done(null,false);
        }

    });
}));
}

希望此帮助。

答案 1 :(得分:0)

好像您的密钥是<div *ngFor="let data of summary"> <mat-checkbox [checked]="data.BUY_NOW_STATUS" class="mat-checkbox-inner-container">Buy now</mat-checkbox> </div> 。请尝试使用作为快速中间件的功能,诸如此类

undefined

然后像使用它

function dummyMiddleware(req, res, next) {
    passport.authenticate('jwt', config.secret, function(err, jwtPayload) {
        if (err || !jwtPayload) {
            console.log(err);
            return res.sendStatus(403);
        }
        req.jwtPayload = jwtPayload;
        next();
    }) (req, res, next)
}