0

我正在尝试在嵌套 js 中使用 graphql 实现登录系统。

我有登录 EP - 工作正常 - 返回不记名令牌。

但我必须query得到当前用户:

    import { CurrentUser } from '../auth/user.decorator'
.
.
.
    @Query()
    @UseGuards(JwtAuthGuard)
    public async me(@CurrentUser() user: any) {
        console.log(user)
        return { email: 'foo' }
    }

使用自定义装饰器 ( user.decorator.ts):

import { createParamDecorator, ExecutionContext } from '@nestjs/common';
import { GqlExecutionContext } from '@nestjs/graphql';

export const CurrentUser = createParamDecorator(
  (data: unknown, context: ExecutionContext) => {
    const ctx = GqlExecutionContext.create(context);
    return ctx.getContext().req.user;
  },
);

当我运行me时,我收到一个错误"host.getArgByIndex is not a function",- 它通过...抛出 insindeCurrentUser装饰器有ctx.getContext()什么问题?

我的导入是否正确?

它直接来自nestjs doc: https ://docs.nestjs.com/techniques/authentication

4

1 回答 1

0

您应该按照 Jay McDoniel 的评论检查 Nest 的版本。如果是版本 6,更改createParamDecorator为实现如下

import { createParamDecorator } from '@nestjs/common';

export const CurrentUser = createParamDecorator(
  (data, [root, args, ctx, info]) => ctx.req.user,
);
于 2020-06-16T06:13:53.937 回答