如何拦截nestjs中护照策略的错误?

Ole*_*nko 8 javascript node.js express passport.js nestjs

我使用 Nestjs 和两个护照策略创建了一个身份验证模块:passport-facebook、passport-google-oauth20。一切正常,除非不正常

如果护照策略中存在错误,服务器将返回 500 错误,而不是策略引发的错误。例如,如果来自身份提供商的令牌已被使用,我们会收到FacebookTokenError: 此授权代码已被使用。(passport-facebook) 或TokenError: Bad Request (passport-google-oauth20) 控制台中出现消息,但服务器返回 500 错误。

在这种情况下,nestjs 返回正确错误的方法是什么?

另外,有人可以解释为什么我们需要 2 条路线(auth/google 和 auth/google/callback),而只有一条路线(auth/google 和 @UseGuards(AuthGuard('google'))) 工作正常吗?

Ole*_*nko 15

如果有人遇到同样的问题,我想发布一个答案。您需要实施您的 AuthGuard。例如:

import { Injectable, UnauthorizedException } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';

@Injectable()
export class FacebookAuthGuard extends AuthGuard('facebook') {
  constructor() {
    super();
  }

  handleRequest(err: any, user: any, info: any, context: any, status: any) {
    console.log('errorGuard', err);
    if (err || !user) {
      throw new HttpException(err.message, err.status);
    }
    return user;
  }
}
Run Code Online (Sandbox Code Playgroud)

handleRequest方法中,您可以获取有关您需要的错误的所有信息。500 错误是由护照策略本身引发的。