使用 AWS Lambda 删除 Cognito 用户

bwx*_*--2 5 node.js amazon-cognito aws-lambda

我想让用户能够在我的 Android 应用程序中删除他们的帐户。我已经使用 AWS Amplify 和AWS Cognito User Pool. 但 Amplify 不提供“删除用户”功能,因此我想使用 lambda 函数从我的认知用户池中删除用户。

当用户点击应用程序中的“删除我的帐户”时,将调用该函数。为了测试该函数,我在 Lambda 函数中使用硬编码的用户名,而不是将用户名传递到函数中。但即使这样也行不通。部署 Lambda 函数后,我通过单击控制台中的“测试”来运行该函数。然后控制台会显示Execution result: succeeded,但响应是null。我希望得到 Status 200 或 400 作为响应。在执行的 CloudWatch 日志中,我只能看到我的第一个日志语句(“我在这里”),其他两个没有显示。在 Cognito 控制台中,用户仍然存在。

这是我的Lambda CodeNode.js):

const AWS = require('aws-sdk');

console.log("I was here");

var params = {
 UserPoolId: 'syz****f-dev', 
 Username: '5b53****138'
};
var cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider({
    "region": 'eu-central-1',
});

exports.handler = async (event) => {
  cognitoidentityserviceprovider.adminDeleteUser(params, function(err, data) {
    if (err) { 
      var response = {
        statusCode: 400,
        body: JSON.stringify('Didnt work!'),
      };
      console.log(err, err.stack); 
      return response;
    }
    else  {
      response = {
        statusCode: 200, 
        body: JSON.stringify('yeah!'),
      };
      console.log(data);          
      return response;
    }
  }); 
};
Run Code Online (Sandbox Code Playgroud)

在我测试此函数后,用户“5b53....138”仍然存在于我的 Cognito 用户池“syz....f-dev”中:

在此输入图像描述

这是我在 Cloudwatch 中找到的日志文件:

在此输入图像描述

我的 Lambda 函数具有这 3 个策略的角色,并且我使用了 IAM 策略模拟器,并且AdminDeleteUser允许执行该操作AmazonCognitoAuthenticatedIdentities,因此这不应该是问题:

  • AmazonCognito身份验证
  • 亚马逊CognitoPowerUser
  • AWSLambdaBasicExecutionRole

在 CloudWatch 中,我可以看到该函数已被调用。

G-U*_*nit 7

首先,您的用户池 ID 错误,请通过打开 Cognito 用户池找到正确的:在控制台中打开用户池时看到的第一件事是 id:

在此输入图像描述

它以您所在的地区开头,后跟 _(在您的情况下为 )eu-central-1_

然后尝试使用此代码而不是 adminDeleteUser 函数。然后它应该可以工作:

try {
  const data = await cognitoidentityserviceprovider.adminDeleteUser(params).promise();
} catch (error) {
  console.log(error);
}
Run Code Online (Sandbox Code Playgroud)