nestjs firebase身份验证



我有一个使用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()
}

}
}

完整代码在Github 中可用

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

然而,当用户第一次访问应用程序时,授权头总是为空。例如,如果用户访问注册页面,我们就不能传递auth头。

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

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

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

.forRoutes(CatsController(;

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

最新更新