【问题标题】:List Users in a Group Cognito - Amplify - Lambda - API REST列出组中的用户 Cognito - Amplify - Lambda - API REST
【发布时间】:2021-12-09 18:40:12
【问题描述】:

我正在努力使用 AWS amplify 来获取特定认知组的用户列表。 我总是遇到这个问题:localhost/:1 Access to XMLHttpRequest at 'https://ixa37ulou3.execute-api.eu-central-1.amazonaws.com/dev/users?groupName=xxx' from origin 'http:// localhost:3000' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。 我尝试了很多东西,请参阅下面的最后一次尝试:

第一步:使用“放大添加函数”创建我的 Lambda 函数:

const AWS = require('aws-sdk');
const cognito = new AWS.CognitoIdentityServiceProvider({region:"eu-central-1"});

exports.handler = async (event) => {

    const params = {
        GroupName: event.groupName, 
        UserPoolId: 'eu-central-1_xqIZx0wkT', 
    };

    const cognitoResponse = await cognito.listUsersInGroup(params).promise()

    const response = {
        statusCode:200,
        headers:{
            "Access-Control-Allow-Origin":"*",
            "Access-Control-Allow-Headers":"Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-Amz-User-Agent",
            "Access-Control-Allow-Methods": "*",
            "Access-Control-Allow-Credentials": true
        },
        body: JSON.stringify(cognitoResponse),
    };
    return response;
};

第二步:使用“amplify add api”创建我的REST Api(路径名:/users)

第三步:在 API Gateway 中创建一个新的授权人“使用 cognito 类型并链接到我的用户池,以及令牌来源:授权。对于 /users - ANY - Method Request => 我在授权字段中添加了我的授权人.

第四步:创建我的调用 API 函数:

async function callApi(){

      const user = await Auth.currentAuthenticatedUser()
      const token = user.signInUserSession.idToken.jwtToken
      console.log({token})

      const requestInfo = {
        headers:{
          Authorization: token
        },
        queryStringParameters:{
          groupName:"MyuserGroup"
        }
      }

      const data = await API.get('apilistusers','/users',requestInfo)
      console.log({data})
    }

非常感谢您对此主题的任何帮助,非常感谢。

【问题讨论】:

  • 您缺少 CORS 端点 - 请参阅我的回答 here,了解如何根据您的 API GW 配置进行设置。
  • 嗨@ErmiyaEskandary,我听从了你的建议。当我在 lambda 中尝试我的 lambda 函数时,它可以工作。当我在 API 网关中测试我的 API 时,它也可以工作,但 API 网关跳过授权......从我的 API 我仍然面临这个问题:localhost/:1 Access to XMLHttpRequest at 'xxx' from origin '@987654323 @' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。我错过了一些授权吗?我向 iam 添加了良好的策略,以便能够使用 listUsersInGroup 认知功能。
  • 与授权无关——你使用的是代理还是非代理?你确定你有一个返回正确值的 OPTIONS 端点吗?
  • 我找到了解决问题的新方法,我启用了放大 adminQueries 身份验证。我更新了生成的代码(api/fulambda 函数)以满足我的需要。我想就像你说的那样,也许我的选项端点等有问题。但我无法用我在这个领域的小技能来解决这个问题。再次感谢您的帮助@ErmiyaEskandary

标签: amazon-web-services api aws-lambda amazon-cognito amplify


【解决方案1】:

当前版本的 amplify 可以选择创建一个 lambda 函数来管理 cognito 用户,请参阅“amplify add auth”和此页面https://docs.amplify.aws/cli/auth/admin/

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 2018-07-17
    • 2020-03-19
    • 1970-01-01
    • 2018-08-13
    • 2019-06-02
    • 2020-12-22
    • 2021-02-24
    • 1970-01-01
    相关资源
    最近更新 更多