React Native中Axios在iOS端丢失Authorization头的问题求助
- 强制统一请求头大小写
iOS的NSURLSession可能会自动把请求头字段转成小写,部分后端可能对大小写敏感。试试把Authorization写成全小写的authorization,或者用Axios拦截器同时设置两种大小写的头:
axios.interceptors.request.use(config => { config.headers['Authorization'] = `Bearer ${authToken}`; config.headers['authorization'] = `Bearer ${authToken}`; return config; });
- 排查跨域OPTIONS请求问题
iOS处理跨域时,OPTIONS预请求不会带Authorization头,后端得正确放行这个请求。在FastAPI里配置CORS时明确允许Authorization头:
from fastapi.middleware.cors import CORSMiddleware app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=["*"], # 换成你实际允许的前端域名 allow_credentials=True, allow_methods=["*"], allow_headers=["Authorization", "*"], )
- 用Axios实例统一配置请求头
别每次请求单独写头,直接创建Axios实例时统一设置,减少出错概率:
const api = axios.create({ baseURL: API_URL, headers: { 'Authorization': `Bearer ${authToken}` } }); // 之后用这个实例发请求 api.get('/api/profile/') .then(response => { /* 处理响应 */ }) .catch(err => { /* 处理错误 */ });
- 确认authToken的有效性
iOS端可能存在token未正确初始化的情况,比如异步获取token的时机不对,发起请求前先检查token是否存在:
if (authToken) { let config = { headers: { 'Authorization': `Bearer ${authToken}`, }, method: 'GET', url: `${API_URL}/api/profile/` }; axios.request(config).then(...).catch(...); } else { // 先处理token缺失的情况 }
- 关闭Axios自动转换功能
有时候Axios的自动数据转换会意外修改请求头,试试关闭这个功能:
let config = { headers: { 'Authorization': `Bearer ${authToken}`, }, method: 'GET', url: `${API_URL}/api/profile/`, transformRequest: [(data, headers) => { return data; }] };
内容的提问来源于stack exchange,提问作者Amal Thomas
相关产品推荐
相关产品推荐

