gpt4 book ai didi

nestjs:当我使用 GraphQL 时如何抛出 AuthenticationError

转载 作者:行者123 更新时间:2023-12-02 00:10:58 24 4
gpt4 key购买 nike

我编写了 GqlAuthGuard 模块,但它总是在 JWT 过期或非法时抛出 UnauthorizedException。它将导致堆栈跟踪错误。

我想抛出 AuthenticationError(来自 apollo-server-express)。

我该怎么做?

import { Injectable, ExecutionContext } from '@nestjs/common'
import { AuthGuard } from '@nestjs/passport'
import { GqlExecutionContext } from '@nestjs/graphql'

@Injectable()
export class GqlAuthGuard extends AuthGuard('jwt') {
public getRequest(context: ExecutionContext) {
const ctx = GqlExecutionContext.create(context)
return ctx.getContext().req
}
}

GraphQL Authorization Error

最佳答案

我不得不修改 Jay McDoniel 提出的解决方案:

import { Injectable, ExecutionContext } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { GqlExecutionContext } from '@nestjs/graphql';
import { AuthenticationError } from 'apollo-server-express';

@Injectable()
export class GqlAuthGuard extends AuthGuard('jwt') {
async canActivate(context: ExecutionContext): Promise<boolean> {
try {
return (await super.canActivate(context)) as boolean;
} catch (e) {
throw new AuthenticationError('You are not logged-in.');
}
}

getRequest(context: ExecutionContext) {
const ctx = GqlExecutionContext.create(context);
return ctx.getContext().req;
}
}


关于nestjs:当我使用 GraphQL 时如何抛出 AuthenticationError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59132737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com