Как я могу использовать configService в super ()?
У меня вопрос о настройке переменных окружения.
В официальном документе говорится об использовании ConfigModule в этом случае, но мой случай - исключительный случай.
Потому что я хотел бы использовать его в super() в конструкторе.
Мой код ниже.
Есть какое-то решение в этом случае?
Если вам нужна дополнительная информация, дайте мне знать.
Спасибо за вашу поддержку!!
// jwt.strategy.ts
import { UnauthorizedException } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { PassportStrategy } from '@nestjs/passport';
import { InjectRepository } from '@nestjs/typeorm';
import { Strategy, ExtractJwt } from 'passport-jwt';
import { JwtPayload } from './jwt-payload.interface';
import { UserRepository } from './user.repository';
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(
@InjectRepository(UserRepository)
private userRepository: UserRepository,
private configService: ConfigService,
) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: configService.get('JWT_TOKEN'),
});
}
async validate(payload: JwtPayload) {
const { username } = payload;
const user = await this.userRepository.findOne({ username });
if (!user) {
throw new UnauthorizedException();
}
return user;
}
}
3 ответа
Я также хотел бы отметить, что, поскольку вы не используете нигде, кроме
super()
называть использование
private
ключевое слово перед ним избыточно
Вы можете попробовать использовать
this.configService.get('JWT_TOKEN')
а на вас просто наорет, что вы не позвонили супер
Удаление частного ключевого слова просто позволит избежать
configService
как переменную класса и просто рассматривать ее как некоторую переданную ей опцию
Для тебя
Strategy
ты скучаешь по
@Injectable()
который сообщает Nest, что ему необходимо внедрить зависимости, определенные в конструкторе.
Вам необходимо импортировать configModule в свой класс модуля, чтобы configService работал. Также добавьте @Injectable() прямо над именем класса, чтобы указать, что это провайдер.
Вот как вы импортируете модуль.
//auth.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { JwtStrategy } from './jwt.strategy';
@Module({
imports: [ConfigModule],
provider:[JwtStrategy]
})
export class AuthModule {}
NestJs разрешает зависимости между ними.
см. https://docs.nestjs.com/techniques/configuration#using-the-configservice