@keyotor

Как получить payload из jwt стратегии?

У меня есть jwt стратегия:
export class JwtStrategy extends PassportStrategy(Strategy, "jwt") {
    constructor() {
        super({
            ignoreExpiration: false,
            secretOrKey: "secret",
            jwtFromRequest: ExtractJwt.fromExtractors([
                (request: Request) => {
                let data = request.cookies['access'];
                    return data;
                }
            ]),
        });
    }

    async validate(payload: any){
        return payload;
    }
}

И вот мой контроллер
export class AuthController {
    constructor(private authService: AuthService) {}

    @UseGuards(AuthGuard("jwt"))
    @Get()
    getPayload() {
       // здесь мне нужно получить payload который был возвращен из jwt стратегии.
    }
}

Как я могу получить payload в контроллере который был возвращен в jwt стратегии?
Использую nestjs
  • Вопрос задан
  • 353 просмотра
Решения вопроса 1
yarkov
@yarkov
Помог ответ? Отметь решением.
Создаём свой декоратор @User:
// user.decorator.ts
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
import { JWTPayload } from '@/api/auth/auth.service';

export const User = createParamDecorator(
  (userField: keyof JWTPayload, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    const user: JWTPayload | undefined = request.user;

    return userField ? user?.[userField] : user;
  },
);


Используем так:
export class AuthController {
    constructor(private authService: AuthService) {}

    @UseGuards(AuthGuard("jwt"))
    @Get()
    getPayload(@User() user: JWTPayload) {
       // здесь мне нужно получить payload который был возвращен из jwt стратегии.
    }

    @UseGuards(AuthGuard("jwt"))
    @Get(':id')
    getUserId(@User('id') userId: string) {
       // здесь мне нужно получить payload который был возвращен из jwt стратегии.
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы