аутентификация на базе nestjs firebase

#javascript #firebase #firebase-authentication #nestjs #typeorm

#javascript #firebase #firebase-аутентификация #nestjs #typeorm

Вопрос:

У меня есть приложение nestjs, которое использует typeorm и mysql. Теперь я хотел бы добавить 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()
    }
    
  }
}
  

Полный код доступен на Github

Проблема с приведенным выше кодом заключается в том, что он всегда ищет токен аутентификации, const { authorization } = req.headers const token = authorization.slice(7)

Однако, когда пользователь впервые обращается к приложению, заголовок авторизации всегда равен нулю. пример, если пользователь получает доступ к странице регистрации, мы не можем передать заголовок аутентификации.

пожалуйста, дайте мне знать, как я могу изменить приведенный выше код, когда пользователь получает доступ к странице регистрации, это позволяет пользователю создавать пользовательскую базу данных, после чего те же данные могут быть сохранены в базе данных.

Ответ №1:

Мы можем исключить маршруты, для которых вам не нужно это промежуточное программное обеспечение.

потребитель .применить(LoggerMiddleware) .исключить( { путь: ‘cats’, метод: RequestMethod.GET }, { путь: ‘cats’, метод: RequestMethod.POST }, ‘cats/(.*)’, )

.forRoutes(CatsController);

Ответ №2:

Вы можете просто next() пропустить это промежуточное программное обеспечение, если нет авторизации. таким образом, можно получить доступ к API регистрации, когда нет авторизации