【问题标题】:How I can intercept errors from passport strategies in nestjs?如何拦截nestjs中护照策略的错误?
【发布时间】:2020-06-30 02:58:02
【问题描述】:

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

如果护照策略有错误,服务器会返回 500 错误,而不是策略抛出的错误。例如,如果身份提供者的令牌已经被使用,我们会得到 FacebookTokenError: This authorization code has been used. (passport-facebook) 或 TokenError: Bad Request (passport- google-oauth20) 消息在控制台中,但服务器返回 500 错误。

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

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

【问题讨论】:

    标签: javascript node.js express passport.js nestjs


    【解决方案1】:

    如果有人遇到同样的问题,我想发布一个答案。你需要实现你的 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;
      }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2022-08-12
      • 2019-07-01
      • 2021-01-10
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 2020-04-20
      相关资源
      最近更新 更多