【发布时间】:2019-09-13 04:37:02
【问题描述】:
我已经在 nestJs 中实现了 jwt 身份验证。但是,每当我尝试使用以下授权标头进行身份验证时:
Bearer <token> or JWT <token>
我得到了 401。这些是我的身份验证文件
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
constructor(private readonly authService: AuthService) {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: `${process.env.SECRET}`,
});
}
async validate(payload: Credentials) {
const user: Account = await this.authService.validateAccount(payload);
if (!user) {
throw new UnauthorizedException();
}
return user;
}
}
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {
canActivate(context: ExecutionContext) {
return super.canActivate(context);
}
handleRequest(err, user, info) {
if (err || !user) {
throw err || new UnauthorizedException();
}
return user;
}
}
这是我的身份验证模块
@Module({
imports: [
PassportModule.register({ defaultStrategy: 'jwt' }),
JwtModule.register({
secretOrPrivateKey: `${process.env.SECRET}`,
}),
AccountModule,
],
providers: [AuthService, JwtStrategy],
controllers: [AuthController],
exports: [PassportModule, AuthService],
})
export class AuthModule {
}
【问题讨论】:
-
您能在
authService.validateAccount中添加console.log吗?它被称为?它是否返回一个真实的值? -
令我惊讶的是它没有被调用。
-
@Arsene 这对你有用吗,我遇到了同样的问题,registerAsync 由于某种原因不起作用。但是 register 方法有效
标签: typescript jwt nestjs nestjs-passport nestjs-jwt