我已按照本指南尝试使 JWT 身份验证正常工作。
我唯一的区别是我将 JWT 令牌保留在 HttpOnly cookie 中,这意味着需要自定义提取器。
我找到了一个如何从 cookie 中提取 Token的示例。所以,唯一的区别是:
jwtFromRequest: ExtractJwt.fromExtractors([(req: Request) => {
return req?.cookies?.access_token
}])
不幸的req
是undefined
,没有明显的原因。
这就是我的auth.module.ts的样子:
@Module({
imports: [
PassportModule,
JwtModule.register({
secret: 'qweqweqweqeqwe',
signOptions: { expiresIn: '20s' }
})
],
providers: [
AuthService,
AuthResolver,
JwtAuthGuard,
JwtStrategy
]
})
export class AuthModule { }
我还创建了一个策略文件jwt.stragegy.ts:
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor() {
super({
jwtFromRequest: ExtractJwt.fromExtractors([(req: Request) => {
return req?.cookies?.access_token
}]),
ignoreExpiration: false,
secretOrKey: 'qweqweqweqeqwe',
})
}
async validate(payload: any) {
return { userId: payload.sub, username: payload.username }
}
}
auth.guard.ts:
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}
可能是 passport.js 库方面的错误吗?就像,@nestjs/passport 无法映射参数或其他东西......