我正在使用nestjs,并且在使用警卫来验证请求时遇到问题。 我的JwtStrategy永远不会执行。
这是我的JwtStrategy:
<RelativeLayout
android:layout_width="200dp"
android:layout_height="200dp">
<ImageView
android:src="@drawable/your_image"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:layout_centerInParent="true"
android:textColor="@color/black"
android:text="text in center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
我也尝试直接在构造函数中直接调用@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;
};
}
,但没有任何变化...
我的AuthModule:
validate()
我的控制器
@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 {}
我总是收到401状态代码。
感谢您的帮助。
答案 0 :(得分:0)
validate
仅在传递有效的jwt令牌时被调用。当令牌使用其他机密签名或过期时,将永远不会调用validate
。确保您具有有效的令牌。您可以使用jwt debugger检查令牌。