【问题标题】:nestjs firebase authenticationnestjs firebase 身份验证
【发布时间】:2021-01-13 22:12:43
【问题描述】:

我有使用 typeorm 和 mysql 的 nestjs 应用程序。现在我想添加用于身份验证处理的firebase,即用于注册、登录、电子邮件验证、忘记密码等。

计划是先在firebase中创建用户,然后将相同的用户详细信息添加到mysql用户表中以进行进一步操作。所以为此我使用定制的中间件

@Injectable()
export class FirebaseAuthMiddleware implements NestMiddleware {
  async use(req: Request, _: Response, next: Function) {
    const { authorization } = req.headers
    // Bearer ezawagawg.....
    if(authorization){
      const token = authorization.slice(7)

      const user = await firebase
        .auth()
        .verifyIdToken(token)
        .catch(err => {
          throw new HttpException({ message: 'Input data validation failed', err }, HttpStatus.UNAUTHORIZED)
        })

      req.firebaseUser = user
      next()
    }
    
  }
}

Full code is available in Github

上面代码的问题是,它总是寻找身份验证令牌const { authorization } = req.headers const token = authorization.slice(7)

但是,当用户第一次访问应用程序时,授权标头始终为空。 例如,如果用户访问注册页面,我们无法传递 auth 标头。

请告诉我当用户访问注册页面时如何修改上述代码,它允许用户创建用户firebase,然后可以将相同的详细信息存储在数据库中。

【问题讨论】:

    标签: javascript firebase firebase-authentication nestjs typeorm


    【解决方案1】:

    如果没有授权,你可以直接 next() 跳过这个中间件。所以在没有授权的情况下访问注册api是可以的

    【讨论】:

      【解决方案2】:

      我们可以排除您不需要此中间件的路由。

      消费者 .apply(LoggerMiddleware) 。排除( { 路径:“猫”,方法:RequestMethod.GET }, { 路径:“猫”,方法:RequestMethod.POST }, '猫/(。*)', )

      .forRoutes(CatsController);

      【讨论】:

        猜你喜欢
        • 2021-02-12
        • 2018-11-02
        • 2019-03-28
        • 2019-09-05
        • 1970-01-01
        • 2020-04-01
        • 2022-12-10
        • 1970-01-01
        相关资源
        最近更新 更多