在NestJS中使用Passport JWT遭遇Unauthorized 401(缺失凭证)问题
核心问题定位
你的jwt.strategy.ts中导入了错误的策略类:从passport-local导入了Strategy,但JWT身份认证需要使用passport-jwt包中的Strategy。这个错误会导致Passport无法正确解析请求中的JWT令牌,直接返回401状态码。
修复步骤
修改jwt.strategy.ts的导入语句,替换为正确的Strategy来源:
// 错误导入 // import { Strategy } from "passport-local"; // 正确导入 import { Strategy } from 'passport-jwt';
修复后的完整jwt.strategy.ts代码
import { Injectable } from "@nestjs/common"; import { PassportStrategy } from "@nestjs/passport"; import { ExtractJwt, Strategy } from "passport-jwt"; @Injectable() export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') { constructor() { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), ignoreExpiration: true, secretOrKey: 'a', }); } async validate(payload: any) { return payload; } }
额外验证建议
- 密钥一致性:确认
JwtModule和JwtStrategy中使用的签名密钥完全一致,生产环境建议通过环境变量存储密钥,避免硬编码。 - 请求头格式:确保请求的
Authorization头严格遵循Bearer <token>格式,无多余空格或拼写错误。 - 策略名称匹配:
JwtAuthGuard中指定的策略名称'jwt'与PassportStrategy的第二个参数一致,这部分你的代码已经配置正确。
重启服务后,使用有效的JWT令牌请求/authCheck接口,即可正常通过认证。
内容的提问来源于stack exchange,提问作者LoisDuplain
相关产品推荐
相关产品推荐

