我正在尝试在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:如果未定义自定义策略名称,则无法在Authenticator.use中读取未定义的属性“name”:passport.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(
....
));
解决方法:
这应该工作:
var myStrat = require('passport-something').Strategy(
{ .... }
);
passport.use('something', new myStrat());
或者,如果你想持有实例:
var myStratInstance = new (require('passport-something').Strategy)(
{ .... }
);
passport.use('something', myStratInstance);