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

NestJS集成JWT授权遇401未授权错误求助

JWT授权返回401 "No auth token"问题排查方案

根据你提供的代码和错误信息,核心问题是后端未接收到JWT Token,以下是针对性的排查和解决步骤:

1. 确认前端请求是否正确携带Token

登录接口返回access_token后,前端必须将其放在请求头的Authorization字段中,格式为Bearer <token>。示例代码(以Axios为例):

const accessToken = '登录后获取的token';
axios.get('/api/auth/profile', {
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});

若前端未按此格式发送,后端的ExtractJwt.fromAuthHeaderAsBearerToken()将无法提取Token,直接返回"No auth token"。

2. 检查跨域(CORS)配置

若前后端分离部署,需确保后端允许携带自定义请求头:
在NestJS项目的main.ts中添加CORS配置:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // 允许前端域名跨域,并允许携带Authorization头
  app.enableCors({
    origin: 'http://你的前端域名:端口',
    credentials: true,
    allowedHeaders: ['Authorization', 'Content-Type']
  });
  await app.listen(3000);
}
bootstrap();

3. 验证Token生成与解析正确性

  • 用JWT解析工具验证登录返回的access_token,确认Payload包含正确的username、sub等字段,且签名验证通过(需填入jwtConstants.secret)。
  • 检查auth.service.ts中login方法的jwt.sign(payload)调用,确保使用的是正确的密钥。

4. 简化Guard逻辑测试

暂时恢复默认的JwtAuthGuard,注释掉自定义的canActivate和handleRequest方法:

import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';

@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}

测试是否仍出现相同错误,排除自定义Guard逻辑导致的问题。

5. 检查请求头是否被拦截

通过浏览器开发者工具的"Network"标签查看实际发送的请求头是否包含Authorization字段,排查是否有前端框架或浏览器插件修改/移除了请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:30:47