使用AWS Lambda删除Cognito用户。

5
我想在我的Android应用中为用户提供删除帐户的功能。我已经使用AWS Amplify和AWS Cognito用户池设置了登录/注册功能。但是Amplify没有提供“删除用户”功能,因此我想使用Lambda函数从我的cognito用户池中删除用户。
当用户在应用程序中点击“删除我的帐户”时,将调用该函数。为了测试该函数,我在Lambda函数中使用硬编码的用户名,而不是将其传递到函数中。但即使如此也不起作用。部署Lambda函数后,我通过单击控制台中的“测试”来运行函数。然后控制台显示执行结果:成功,但响应为null。我期望响应为状态200或400。在执行的CloudWatch日志中,我只能看到我的第一个日志语句(“我在这里”),其他两个没有显示。在Cognito控制台中,用户仍然存在。
这是我的Lambda代码Node.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;
    }
  }); 
};

在我测试这个函数之后,我的Cognito用户池"syz....f-dev"中仍然存在用户"5b53....138"。

enter image description here

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

enter image description here

我的Lambda函数有一个角色,具有这三个策略,我使用IAM策略模拟器,操作AdminDeleteUser是允许的,并且AmazonCognitoAuthenticatedIdentities也被允许,所以这不应该是问题:

  • AmazonCognitoAuthenticatedIdentities
  • AmazonCognitoPowerUser
  • AWSLambdaBasicExecutionRole

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

2个回答

7
首先,您的用户池ID是错误的,请打开Cognito用户池以查找正确的ID:在控制台中打开用户池时,您看到的第一件事是ID:enter image description here 它以您的区域开头,后跟_,在您的情况下为eu-central-1_。然后尝试使用此代码而不是您的adminDeleteUser函数。然后它应该可以正常工作。
try {
  const data = await cognitoidentityserviceprovider.adminDeleteUser(params).promise();
} catch (error) {
  console.log(error);
}

0
但是Amplify没有提供“删除用户”功能,所以我想使用一个lambda函数从我的Cognito用户池中删除用户。
看起来现在你可以直接使用Auth来做到这一点。以下是一些示例和来源:
Typescript (JS):
import { Auth } from 'aws-amplify';

export async function deleteUser() {
  try {
    const result = await Auth.deleteUser();
    console.log(result);
  } catch (error) {
    console.log('Error deleting user', error);
  }
}

源代码:https://docs.amplify.aws/lib/auth/delete_user/q/platform/js/ Java(Android):
Amplify.Auth.deleteUser(
    () -> Log.i("AuthQuickStart", "Delete user succeeded"),
    error -> Log.e("AuthQuickStart", "Delete user failed with error " + error.toString())
);

来源:https://docs.amplify.aws/lib/auth/delete_user/q/platform/android/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接