#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
заполняется в первую очередь?