Passport JwtStrategy从未在nestjs中执行

时间:2019-04-20 09:49:58

标签: nestjs

我正在使用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状态代码。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

validate仅在传递有效的jwt令牌时被调用。当令牌使用其他机密签名或过期时,将永远不会调用validate。确保您具有有效的令牌。您可以使用jwt debugger检查令牌。