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