【问题标题】:Node + Passport, Error: Authentication strategies must have a nameNode + Passport,错误:身份验证策略必须有名称
【发布时间】:2016-05-20 01:33:04
【问题描述】:

我正在尝试在 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.use(如果未定义自定义策略名称):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(
    ....
));

【问题讨论】:

    标签: javascript node.js passport.js saml


    【解决方案1】:

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

    例子:

    import {Strategy} from 'passport-local' ===> 是的

    import {Strategy} from 'passport' ===> 错误

    【讨论】:

      【解决方案2】:

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

      "passport.use(user.createStrategy);"

      一定要改成这个。,

      passport.use(user.createStrategy());

      希望这对你有用!

      【讨论】:

        【解决方案3】:

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

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

        }

        //在嵌套js中

        【讨论】:

          【解决方案4】:

          这应该可行:

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

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

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

          【讨论】:

          • 如果要持有实例是什么意思?请详细说明您给出的两个示例。
          • @MuhammadHannan 他很可能的意思是“持有创建的实例”。在第一个示例中,myStrat 并不完全是策略,而是创建策略的函数。第二个myStrat 是创建的策略。我认为两者之间没有实际区别。
          猜你喜欢
          • 2020-12-10
          • 2021-10-29
          • 1970-01-01
          • 1970-01-01
          • 2017-03-02
          • 2017-05-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多