在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包裹组件,传入的userprops中也不会直接包含Token,必须通过Auth.currentSession()获取。
内容的提问来源于stack exchange,提问作者Filipe Braga
相关产品推荐
相关产品推荐

