#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()
}
}
}
Проблема с приведенным выше кодом заключается в том, что он всегда ищет токен аутентификации, const { authorization } = req.headers const token = authorization.slice(7)
Однако, когда пользователь впервые обращается к приложению, заголовок авторизации всегда равен нулю. пример, если пользователь получает доступ к странице регистрации, мы не можем передать заголовок аутентификации.
пожалуйста, дайте мне знать, как я могу изменить приведенный выше код, когда пользователь получает доступ к странице регистрации, это позволяет пользователю создавать пользовательскую базу данных, после чего те же данные могут быть сохранены в базе данных.
Ответ №1:
Мы можем исключить маршруты, для которых вам не нужно это промежуточное программное обеспечение.
потребитель .применить(LoggerMiddleware) .исключить( { путь: ‘cats’, метод: RequestMethod.GET }, { путь: ‘cats’, метод: RequestMethod.POST }, ‘cats/(.*)’, )
.forRoutes(CatsController);
Ответ №2:
Вы можете просто next() пропустить это промежуточное программное обеспечение, если нет авторизации. таким образом, можно получить доступ к API регистрации, когда нет авторизации