React Native应用请求遇Unauthorized错误,无法获取Token求助
按优先级从以下方向排查:
检查请求头的认证凭证
确认Token接口请求中Authorization头的格式和内容是否正确。比如使用Basic Auth时,需将username:password做base64编码,且前缀为Basic(注意空格);若用API Key,要确认放在了后端要求的头字段(如X-API-Key)里。
示例代码:// Basic Auth请求头示例 const authHeader = 'Basic ' + btoa(`${username}:${password}`); fetch('https://your-api.com/token', { method: 'POST', headers: { 'Authorization': authHeader, 'Content-Type': 'application/json' }, body: JSON.stringify({ grant_type: 'password' }) })核对请求参数的正确性
确认传给Token接口的参数与后端要求完全一致:比如grant_type是否为password(密码模式下),username、password、client_id等字段名有没有写错,参数值是否有效。部分后端会更新参数规则,比如新增必填参数或修改字段名,这会直接导致未授权。排查环境配置变化
检查是否误切换了运行环境(如从测试环境切到生产环境),或者.env文件中的API地址、认证凭证被修改。比如测试环境与生产环境的CLIENT_ID不同,未同步更新就会触发授权失败。查看后端返回的详细错误信息
不要只关注HTTP状态码,打印响应体内容。多数后端会返回具体错误描述,比如{"error":"invalid_grant","error_description":"Bad credentials"},这类信息能直接定位问题(如密码错误、凭证过期)。
示例代码:fetch('https://your-api.com/token', { ... }) .then(res => res.json()) .then(data => { if (data.error) console.log('错误详情:', data.error_description); }) .catch(err => console.log(err));检查Token缓存与刷新逻辑
若之前缓存过Token,确认Token是否已过期。JWT Token可解码查看exp字段(过期时间戳),若已过期,检查刷新Token逻辑是否正常触发,是否因刷新Token也过期导致无法获取新Token。
内容的提问来源于stack exchange,提问作者Muhammad Sayed

