nestjs - Passport JwtStrategy 从未在 Nestjs 中执行
问题描述
我正在使用nestjs,并且在使用警卫对请求进行身份验证时遇到问题。我的 JwtStrategy 永远不会执行。
这是我的 JwtStrategy :
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
constructor(
@Inject('IQueryBusAdapter')
private readonly queryBus: IQueryBusAdapter,
) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: process.env.JWT_SECRET_KEY,
});
}
validate = async (payload: IJwtPayload) => {
Logger.log('INNNNN');
const query = new GetUserByIdQuery();
query.id = payload.id;
const user = await this.queryBus.execute(query);
if (!(user instanceof User)) {
throw new UnauthorizedException();
}
return user;
};
}
我也尝试validate()
直接在构造函数中直接调用,但没有任何改变......
我的 AuthModule :
@Module({
imports: [
BusModule,
JwtModule.register({
secretOrPrivateKey: process.env.JWT_SECRET_KEY,
signOptions: {
expiresIn: process.env.JWT_EXPIRES,
},
}),
PassportModule.register({ defaultStrategy: 'jwt' }),
TypeOrmModule.forFeature([User]),
],
controllers: [RegisterAction, LoginAction],
providers: [
JwtStrategy,
],
})
export class AuthModule {}
我的控制器
@Get('/:id')
@ApiOperation({ title: 'Get user ressource' })
@UseGuards(AuthGuard('jwt'))
async index(@Param() query: GetUserByIdQuery): Promise<object> {
const user = await this.queryBus.execute(query);
if (!(user instanceof User)) {
throw new NotFoundException();
}
return {
id: user.id,
fullName: user.getFullName(),
email: user.email
};
}
我总是收到 401 状态码。
谢谢你的帮助。
解决方案
validate
仅当您传递有效的 jwt 令牌时才会调用。当令牌使用不同的秘密签名或过期时,validate
将永远不会被调用。确保您拥有有效的令牌。您可以使用jwt 调试器检查您的令牌。
推荐阅读
- python - 将字符串文件转换为所需格式:将 / 替换为 _,逗号前除外
- javascript - 为什么会发生?带有 Date() 减法的 JavaScript 的奇怪行为。CodePen + 视频
- python - 如何使用 1 行代码根据 pandas 数据框中的值删除多行?
- javascript - 富文本编辑器和源代码编辑器,使用 javascript 相互传输内容
- r - 将文本文件中的谷歌评论转换为 rmarkdown 脚注
- swift - 快速解析 get_video_info(YouTube 信息数据)
- c++ - 更改对象并在同一表达式中使用它但子表达式由逗号运算符分隔是未定义的行为吗?
- reactjs - 如何将异步存储值直接分配给状态
- python - 在 Pandas 中创建年份列
- c - 如何对表示时间表的数组结构对象进行排序