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

在Next.js+NestJS项目中获取AWS Cognito Token并配置Axios请求头

获取AWS Amplify JWT Token并添加到Axios请求头的正确方式

不要直接读取localStorage来获取Token——Amplify的本地存储键属于内部实现细节,会随用户池ID、用户状态变化,稳定性无法保证。正确做法是使用Amplify Auth模块的官方API获取Token,再通过Axios拦截器自动注入请求头。

步骤1:导入Amplify Auth模块

在需要处理Token的文件中,导入Auth模块:

import { Auth } from 'aws-amplify';

步骤2:编写Token获取工具函数

通过Auth.currentSession()获取当前用户会话,从中提取符合后端要求的JWT Token(一般用accessToken做API授权,idToken多用于身份标识):

const getJwtToken = async () => {
  try {
    const session = await Auth.currentSession();
    // 获取accessToken,适用于API授权场景
    return session.getAccessToken().getJwtToken();
    // 若后端需要idToken,替换为:session.getIdToken().getJwtToken();
  } catch (err) {
    console.error('Token获取失败:', err);
    return null;
  }
};

步骤3:配置Axios拦截器自动注入Token

创建自定义Axios实例并添加请求拦截器,让所有请求自动带上Authorization头,无需手动重复配置:

import axios from 'axios';

// 创建Axios实例,统一配置基础URL和默认头
const apiClient = axios.create({
  baseURL: 'http://localhost:3001/dev/',
  headers: {
    'Content-Type': 'application/json',
  },
});

// 请求拦截器:自动为合法请求添加Token
apiClient.interceptors.request.use(
  async (config) => {
    const token = await getJwtToken();
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => Promise.reject(error)
);

// 后续使用apiClient发起请求,无需手动设置Authorization头
const response = await apiClient({
  method: method as Method,
  url: query,
  data,
});

补充说明

  • Auth.currentSession()会自动处理会话过期、用户未登录等异常情况,可在catch块中添加跳转登录页等逻辑。
  • 即使使用withAuthenticator包裹组件,传入的user props中也不会直接包含Token,必须通过Auth.currentSession()获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:40:25