如何在NestJS的Passport JWT验证函数中获取Express Request?
解决JwtStrategy中validate函数无法获取Express Request对象的问题
问题出在你没有开启Passport JWT的passReqToCallback配置项,默认情况下validate方法只会接收JWT payload作为第一个参数,导致你现在的参数顺序完全错位。
修复方法很简单:
- 在
super()的配置对象中添加passReqToCallback: true,开启将Request对象传递给validate的功能 - 保持
validate方法的参数顺序为(request: Request, payload: any)即可
修改后的完整代码:
import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { PassportStrategy } from '@nestjs/passport'; import { ExtractJwt, Strategy } from 'passport-jwt'; import { PrismaService } from 'src/prisma/prisma.service'; import { Request } from 'express'; @Injectable() export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') { constructor(config: ConfigService, private prisma: PrismaService) { super({ jwtFromRequest: ExtractJwt.fromExtractors([ (request: Request) => { //Check if user has cookie "access_token" if ( request.cookies && 'access_token' in request.cookies && request.cookies.access_token.length > 0 ) { return request.cookies.access_token; } return null; }, ]), ignoreExpiration: false, secretOrKey: config.get('JWT_SECRET'), // 添加这一行,开启传递Request到validate passReqToCallback: true, }); } async validate(request: Request, payload: any) { console.log(request); console.log(payload); // 这里可以继续添加你的业务逻辑,比如根据payload查询用户等 } }
内容的提问来源于stack exchange,提问作者Arshia Arsh1a Faraji
相关产品推荐
相关产品推荐

