209 похожих чатов

Добрый вечер. Подскажите пожалуйста делаю  guard и получаю ошибку {

"message": "Unauthorized",
"statusCode": 401
}
начал проверять правильная ли сигнатура примитивным дебагом
const payload = await this.jwtService.verifyAsync(tokens.accessToken);
log(payload);
так работает, но если передавать в options secret стрингой то ошибка, если беру из конфига то порядок, предполагаю что с этим связана проблема и в гарде когда я екстендюсь от класса

export class JwtAuthGuard extends AuthGuard('jwt') {}
вот пример стратегии для jwt
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { PassportStrategy } from '@nestjs/passport';
import { ModelType } from '@typegoose/typegoose/lib/types';
import { InjectModel } from 'nestjs-typegoose';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { UserModel } from 'src/user/user.model';

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(
private readonly configService: ConfigService,
@InjectModel(UserModel) private readonly UserModel: ModelType<UserModel>
) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken,
ignoreExpiration: true,
secretOrKey: configService.get('JWT_SECRET'),
});
}

async validate({ _id }: Pick<UserModel, '_id'>) {
return this.UserModel.findById(_id).exec(); // exec - execute to perform query
}
}

как мне заставить его работать?
можно написать свой гард кастомный, но тогда мне в него нужно инжектить jwtService, но гард лежит не в модуле и я не понимаю целесообразно ли это делать, мне кажется это лишнее

1 ответов

28 просмотров

можно написать свой гард кастомный, но тогда мне в него нужно инжектить jwtService, но гард лежит не в модуле и я не понимаю целесообразно ли это делать, мне кажется это лишнее. Инжекти в middleware jwt service, а в guard проверяй как там дела в реквесте, я бы кинул в закреп свои 2 смски, уже раз 6ой скидываю всем как делается auth

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

Карта сайта