Node + Passport,错误:身份验证策略必须具有名称

时间:2016-02-09 21:36:04

标签: javascript node.js passport.js saml

我尝试在require行期间初始化SAML策略。像这样:

var myStrat = new require('passport-something').Strategy(
    { .... }
);
passport.use('something', myStrat);

但是我收到了错误:

.../passport/lib/authenticator.js:54
  if (!name) { throw new Error('Authentication strategies must have a name'); }
               ^

Error: Authentication strategies must have a name
    at Authenticator.use ...
如果未定义自定义策略名称,请

TypeError: Cannot read property 'name' of undefined at Authenticator.usepassport.use(myStrat);

我已经这样(有效):

var mySomething = require('passport-something');
var myStrat = new mySomething.Strategy(
    { .... }
);
passport.use(myStrat);

但我希望改变它,因为我需要稍后致电passport-saml的Stragety.generateServiceProviderMetadata()功能。 其中(我认为)意味着我需要一个指向新Strategy实例的变量。 我知道,这并不是什么大不了的事情,如果可以的话,我想让这个特定策略的代码看起来更符合其余部分。这一切看起来像:

var GoogleStrat = require( 'passport-google-oauth2' ).Strategy;
passport.use('google', new GoogleStrat(
    ....
));

3 个答案:

答案 0 :(得分:7)

这应该有效:

var myStrat = require('passport-something').Strategy(
    { .... }
);
passport.use('something', new myStrat());

或者,如果你想持有实例:

var myStratInstance = new (require('passport-something').Strategy)(
    { .... }
);
passport.use('something', myStratInstance);

答案 1 :(得分:0)

我收到了这个错误。 如果你的代码中有这行代码

"passport.use(user.createStrategy);"

一定要改成这个,

passport.use(user.createStrategy());

希望对你有用!

答案 2 :(得分:-2)

// 在这部分代码中为您的策略提供一个名称

从“@nestjs/passport”导入{PassportStrategy}; 导出类 JwtAuthStrategy 扩展 PassportStrategy(Strategy, ''){

}

// 在嵌套 js 中