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

NestJS JwtStrategy报错:需提供请求获取JWT的函数(已加配置仍无效)

解决NestJS JwtStrategy报错:"JwtStrategy requires a function to retrieve jwt from requests"

你遇到的报错根源是两个低级错误,修正后即可解决问题:


1. 配置项拼写错误

你在AtStrategy和RtStrategy的构造函数配置里写了jwtFormRequest,而Passport-JWT要求的正确参数名是jwtFromRequest(把Form改成From)。这个拼写错误导致框架无法识别你配置的JWT提取函数。

2. RtStrategy的Strategy导入错误

RtStrategy里错误导入了passport-local的Strategy,而JWT策略需要使用passport-jwt的Strategy,这会导致策略初始化逻辑混乱。


修正后的完整代码

at.strategy.ts

import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport/dist';
import { ExtractJwt, Strategy } from 'passport-jwt';

@Injectable()
export class AtStrategy extends PassportStrategy(Strategy, 'jwt') {
  constructor() {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('jwt'), // 修正拼写
      ignoreExpiration: false,
      secretOrKey: 'at-secret',
    });
  }

  validate(payload: any) {
    return payload;
  }
}

rt.strategy.ts

import { PassportStrategy } from '@nestjs/passport/dist';
import { ExtractJwt, Strategy } from 'passport-jwt'; // 修正Strategy来源
import { Request } from 'express';
import { Injectable } from '@nestjs/common';

@Injectable()
export class RtStrategy extends PassportStrategy(Strategy, 'jwt-refresh') {
  constructor() {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('jwt'), // 修正拼写
      ignoreExpiration: false,
      secretOrKey: 'rt-secret',
      passReqToCallback: true,
    });
  }

  validate(req: Request, payload: any) {
    const refreshToken = req.get('authorization').replace('Bearer', '').trim();
    return {
      ...payload,
      refreshToken,
    };
  }
}

修正后重新启动服务,即可正常初始化JWT策略,报错会消失。

内容的提问来源于stack exchange,提问作者Matic Pohovski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:05