上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

nestjs passport为什么需要导入passportModule

[复制链接]
  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    633

    主题

    5173

    回帖

    6052

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6052

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2023-1-6 02:54:18 | 显示全部楼层 | 阅读模式

    在翻阅@nestjs/passport源码中可以搜到关键字

    const NO_STRATEGY_ERROR = `In order to use "defaultStrategy", please, ensure to import PassportModule in each place where AuthGuard() is being used. Otherwise, passport won't work correctly.`;

    使用defaultStrategy必须确保在每个使用AuthGuard导入PassportModule,否则passport无法正常工作
    搜一下这个问题的触发位置

        constructor(@Optional() options?: AuthModuleOptions) {
          this.options = options ?? this.options;
          if (!type && !this.options.defaultStrategy) {
            new Logger('AuthGuard').error(NO_STRATEGY_ERROR);
          }
        }

    这里判断了type盒options,options如果没有传入则默认AuthModuleOptions
    我们搜一下AuthModuleOptions

    export class PassportModule {
      static register(options: IAuthModuleOptions): DynamicModule {
        return {
          module: PassportModule,
          providers: [{ provide: AuthModuleOptions, useValue: options }],
          exports: [AuthModuleOptions]
        };
      }
     }

    到这里就真相大白了,如果你没有传入type告诉用什么策略
    这个时候就会尝试获取AuthModuleOptions默认策略,AuthModuleOptions来自于PassportModule 的register提供
    所以如果你想使用AuthGuard不传入任何值
    必须在同模块引入PassportModule

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表