【问题标题】:nestjs/swagger How Do I Change The Default "Username" Field in Basic Authnestjs/swagger 如何更改基本身份验证中的默认“用户名”字段
【发布时间】:2021-06-19 08:17:53
【问题描述】:
  @ApiBasicAuth()
  @UseGuards(LocalAuthGuard)
  @Post('login')
  async login(@Request() req) {
    return this.authService.login(req.user);
  }

当我打开 api 文档时,此路由的身份验证显示“用户名”和“密码”字段。 我想将用户名字段更改为“电子邮件”。这可能吗?

【问题讨论】:

    标签: nestjs nestjs-swagger


    【解决方案1】:

    请注意,这与@nestjs/swagger 无关。您需要将配置传递给您的 class LocalStrategy 提供程序中的 passportjs,如下所示:

    @Injectable()
    export class LocalStrategy extends PassportStrategy(Strategy) {
      constructor(private authService: AuthService) {
        super({ usernameField: 'email' })
      }
      ...
    }
    

    正如文档所述:https://docs.nestjs.com/security/authentication#implementing-passport-local

    请阅读整个 Nestjs 的文档,非常好:)

    【讨论】:

    • 感谢您的回复。您提到的代码块已经在我的代码中实现并按预期工作。我的问题是 Swagger api 文档没有正确反映这一点
    【解决方案2】:

    向我们展示您如何为此端点定义主体架构。 @nestjs/passport 不会为你定义这个。

    您可以在 login 方法中添加装饰器 @ApiBody({ type: LoginDto })

    class LoginDto {
      email: string
      password: string
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-02
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 2020-03-20
      • 1970-01-01
      相关资源
      最近更新 更多