NestJS — Найти пользователя с декоратором

#javascript #node.js #cpanel #nestjs

#javascript #node.js #cpanel #nestjs

Вопрос:

В среде NestJS я написал этот декоратор, чтобы иметь доступ к вошедшему в систему пользователю. Я использую стратегию JWT. В localhost все работает отлично, но когда я размещаю свой API (на planethoster, через cPanel), пользователь больше не присутствует в объекте «ctx.switchToHttp().GetRequest()», так что все мои запросы возвращают «401 Несанкционированный».

Я понятия не имею, откуда это могло взяться. Помощь была бы очень признательна! Большое вам спасибо.

 import { createParamDecorator, ExecutionContext, UnauthorizedException } from '@nestjs/common';
import { Client } from '../shared/entities/client.entity';

export const GetClient = createParamDecorator(
    (data: unknown, ctx: ExecutionContext) : Client => {
        const client = ctx.switchToHttp().getRequest().user;
        if (!client)
            throw new UnauthorizedException();
        return client;
    }
);  

Вот содержимое ctx.switchToHttp().GetRequest() в localhost :

 {
  ...
  body: {},
  route: Route {
    path: '/api/client-auth/check-token',
    stack: [ [Layer] ],
    methods: { get: true }
  },
  authInfo: undefined,
  user: Client {
    id: 1,
    ...
  },
  [Symbol(kCapture)]: false
}  

И вот содержимое ctx.switchToHttp().GetRequest() при размещении API :

 {
  ...
  body: {},
  route: Route {
      path: '/api/client-auth/check-token',
      stack: [ [Layer] ],
      methods: { get: true }
  }
}  

Комментарии:

1. Ваш декоратор на самом деле не является охранником. Все, что вы проверяете, существует пользователь или нет. Ваш носитель в заголовках или как-то еще? Как выглядит ваша логика для JwtPayload? У вас есть класс для этого? Для этого декоратор должен быть простым. Что-то вроде /** * « * асинхронный профиль(@Auth() auth: authToken): Обещание<любой> { } * « */ экспортировать const Auth = createParamDecorator((_, запрос: любой) => { if (запрос amp;amp; req.user instanceof authToken) { вернуть запрос.user как authToken; } вернуть неопределенный; });

2. Мой декоратор не является защитником, это декоратор, используемый в параметрах, чтобы иметь прямой доступ к сущности вошедшего в систему пользователя. Для защиты я использую встроенный nestjs, который выглядит следующим образом: @UseGuards(AuthGuard(‘client-jwt’)) Он автоматически выполняет логику аутентификации с помощью authToken

3. Как req.user заполняется в первую очередь?