代码之家  ›  专栏  ›  技术社区  ›  Shivam

Passport JWT抛出密钥提供程序错误

  •  0
  • Shivam  · 技术社区  · 6 年前

    我正在使用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);
            }
    
        });
    }));}
    

    我得到这个错误

    TypeError:无法读取未定义的属性“secretOrKeyProvider” at Object.JwtStrategy[as Strategy](C:\dev\mapd713\HealthCare Project\node\u modules\passport jwt\lib\Strategy.js:33:41) 在物体上(C:\dev\mapd713\HealthCare Project\config\passport.js:1:107) 在模块处编译(Module.js:653:30) 在Object.Module.\u extensions..js(Module.js:664:10) 在Module.load(Module.js:566:32) 在tryModuleLoad(module.js:506:12) 在Function.Module.\u加载(Module.js:498:3) 需要时(内部/module.js:11:18) 在物体上(C:\dev\mapd713\HealthCare Project\server.js:35:1) 在模块处编译(Module.js:653:30) 在Module.load(Module.js:566:32) 在tryModuleLoad(module.js:506:12) 在Function.Module.\u加载(Module.js:498:3)

    I'm getting an error authenticating with Password-JWT 但仍然无法解决问题。我正在使用passport jwt的“^4.0.0”版本

    2 回复  |  直到 6 年前
        1
  •  1
  •   Shivam    6 年前

    我发现主要问题出在我的孩子身上 要求 我导入时的语句 战略

    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);
            }
    
        });
    }));
    }
    

    希望这有帮助。

        2
  •  0
  •   Viswanath Lekshmanan    6 年前

    看来你的钥匙是 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)
    }
    

    然后像这样使用它

    app.use('/your_secure_path', dummyMiddleware);