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
相关产品推荐
相关产品推荐

