You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 14:28:14