gpt4 book ai didi

graphql - nestjs context.swithToHttp()。getRequest()返回未定义

转载 作者:行者123 更新时间:2023-12-03 14:00:50 24 4
gpt4 key购买 nike

我想为Graphql创建RolesGuard

我创建如下的角色装饰器

export const Roles = (...roles: string[]) => SetMetadata('roles', roles);

然后创建GqlAuthGuard和RolesGuard,如下所示
gql-gurad.ts

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

role-guard.ts

@Injectable()
export class RolesGuard implements CanActivate {
constructor(private readonly reflector: Reflector) {}

canActivate(context: ExecutionContext): boolean {
const roles = this.reflector.get<string[]>('roles', context.getHandler());
if (!roles) {
return true;
}
const request = context.switchToHttp().getRequest();
const user = request.user;

...
}
}

const request = context.switchToHttp().getRequest();行返回未定义。

我正在使用两个如下的 guard 队
@AuthGuard(GqlAuthGuard, RolesGuard)
@Mutation(...)

我错过了什么??

最佳答案

我自己解决了。

const request = context.switchToHttp().getRequest();
const user = request.user;

to

const ctx = GqlExecutionContext.create(context);
const user = ctx.getContext().req.user;

我是从Nestjs Discord channel 找到它的。

https://discordapp.com/channels/520622812742811698/520649487924985885

关于graphql - nestjs context.swithToHttp()。getRequest()返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58497740/

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