如何在React Native的AWS Amplify请求中添加Cognito Authorization头
没问题,我刚好做过类似的场景,给你一步步说清楚怎么弄:
首先,你需要先获取当前已登录Cognito用户的JWT令牌——因为API Gateway的Cognito用户池授权器就是靠这个令牌来验证身份的。我们可以用AWS Amplify的Auth模块来获取这个令牌:
- 先确保你已经在React Native项目中正确配置了Amplify(既然你用了Mobile Hub,应该已经配置好了,但还是提一句),然后导入所需模块:
import { Auth, API } from 'aws-amplify';
在发起API请求前,获取用户的会话令牌:
调用Auth.currentSession()方法,它会返回当前登录用户的会话信息,从中提取出idToken或者accessToken(具体用哪个取决于你在API Gateway授权器里的配置,大部分场景下用idToken.jwtToken就可以)。修改你的API请求代码,把令牌放到
Authorization头里:
原来的request对象只包含body,现在要加上headers字段,把令牌传进去。
完整的代码示例如下:
// 假设这是你的请求函数 const makeApiRequest = async () => { try { // 获取当前用户的会话 const session = await Auth.currentSession(); // 获取ID Token(如果你的授权器配置用Access Token,就换成session.getAccessToken().getJwtToken()) const idToken = session.getIdToken().getJwtToken(); // 构造请求参数,添加Authorization头 const request = { body: { attr: value }, headers: { Authorization: idToken // 关键:把令牌放到Authorization头里 } }; // 发起API请求 const response = await API.post(apiName, path, request); console.log(response); } catch (error) { console.error('请求出错:', error); // 处理未登录、令牌过期等错误场景 if (error.name === 'NotAuthorizedException') { console.log('用户未登录或令牌已过期,请重新登录'); // 这里可以添加引导用户登录的逻辑 } } };
几个需要注意的细节:
- 如果你在API Gateway的授权器配置中选择使用Access Token,那就要把
session.getIdToken()替换成session.getAccessToken(); - 一定要处理
Auth.currentSession()可能抛出的错误,比如用户未登录、令牌过期等情况; - 确认你的React Native项目已经正确初始化Amplify,
aws-exports.js里的Cognito用户池配置和Mobile Hub项目一致。
内容的提问来源于stack exchange,提问作者Anson Cen
相关产品推荐
相关产品推荐

