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

Hou*_*272 3 javascript saml node.js passport.js

我正在尝试在require行期间初始化SAML策略.像这样的东西:

var myStrat = new require('passport-something').Strategy(
    { .... }
);
passport.use('something', myStrat);
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

.../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 ...
Run Code Online (Sandbox Code Playgroud)

或者TypeError: Cannot read property 'name' of undefined at Authenticator.use如果未定义自定义策略名称:passport.use(myStrat);

.

我有这样的(有效):

var mySomething = require('passport-something');
var myStrat = new mySomething.Strategy(
    { .... }
);
passport.use(myStrat);
Run Code Online (Sandbox Code Playgroud)

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

var GoogleStrat = require( 'passport-google-oauth2' ).Strategy;
passport.use('google', new GoogleStrat(
    ....
));
Run Code Online (Sandbox Code Playgroud)

use*_*032 7

这应该工作:

var myStrat = require('passport-something').Strategy(
    { .... }
);
passport.use('something', new myStrat());
Run Code Online (Sandbox Code Playgroud)

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

var myStratInstance = new (require('passport-something').Strategy)(
    { .... }
);
passport.use('something', myStratInstance);
Run Code Online (Sandbox Code Playgroud)

  • **如果你想持有实例**是什么意思?请详细说明你给出的两个例子. (2认同)

ali*_*007 5

在 NEST.JS 中不要忘记检查,您从哪里导入策略

例子:

import {Strategy} from 'passport-local'===> 正确

import {Strategy} from 'passport'===> 假