AWS Amplify Cognito的listUsersInGroup接口调用失败求助
问题原因及解决方案
问题出在GET请求的参数传递方式:你使用API.get发起请求时,把groupname放在了请求body中,但HTTP规范里GET请求通常不携带body,AdminQueries的后端(Lambda函数)不会读取GET请求的body内容,因此无法获取到groupname参数,才会返回groupname is required的403错误。
修正代码方案
将groupname作为查询参数传递,有两种写法:
写法1:使用queryStringParameters(推荐)
import { Auth, API } from 'aws-amplify'; const listUsersInGroup = async (group) => { let apiName = 'AdminQueries'; let path = '/listUsersInGroup'; let myInit = { // 替换body为queryStringParameters queryStringParameters: { "groupname": group }, headers: { 'Content-Type' : 'application/json', Authorization: `${(await Auth.currentSession()).getAccessToken().getJwtToken()}` } }; const supervisorGet = await API.get(apiName, path, myInit); return supervisorGet; }
写法2:直接拼接在URL路径中
import { Auth, API } from 'aws-amplify'; const listUsersInGroup = async (group) => { let apiName = 'AdminQueries'; // 直接将groupname作为查询参数拼到path里 let path = `/listUsersInGroup?groupname=${encodeURIComponent(group)}`; let myInit = { headers: { 'Content-Type' : 'application/json', Authorization: `${(await Auth.currentSession()).getAccessToken().getJwtToken()}` } }; const supervisorGet = await API.get(apiName, path, myInit); return supervisorGet; }
为什么其他接口正常?
listUsers、listGroups这类接口要么不需要参数,要么参数是通过路径变量/查询参数传递的;而listGroupsForUser通常是基于用户路径(如/users/{username}/groups)的请求,参数放在URL路径中,符合GET请求的参数传递规范,所以能正常工作。
内容的提问来源于stack exchange,提问作者cagf
相关产品推荐
相关产品推荐

