Пользовательский декоратор CurrentUser Nestjs throw host.getArgByIndex не является функцией

Я пытаюсь реализовать систему входа в систему, используя graphql в nest js.

У меня есть логин 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", - это бросить внутрь CurrentUser декоратор ctx.getContext()... что случилось?

Мой импорт правильный?

Это прямо из документа nestjs:https://docs.nestjs.com/techniques/authentication

1 ответ

Вы должны проверить версию Nest как комментарий Джея Макдониэля. Если это версия 6, изменитеcreateParamDecorator реализовать следующим образом

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

export const CurrentUser = createParamDecorator(
  (data, [root, args, ctx, info]) => ctx.req.user,
);
Другие вопросы по тегам