如何将用户添加到AWS Cognito用户池组中?

时间:2019-07-20 09:29:40

标签: ios swift amazon-web-services amazon-cognito aws-userpools

我正在使用AWS Cognito在我的iOS APP(Swift)中实现用户注册和登录。

用户注册后,我想将该用户添加到已在我的Cognito用户池中创建的指定用户池组中。

我已经尝试过以下快速代码,但似乎不起作用。

用户注册后,他或她按下[addToGroup]按钮加入名为[GroupA]的用户池组。

@IBAction func addToGroupButton(_ sender: Any) {
        let request = AWSCognitoIdentityProviderAdminAddUserToGroupRequest()
        request?.groupName = "GroupA"
        request?.userPoolId = "ap-northeast-1_8H0k*****"
        request?.username = eMailAdd

        let identityProvider = AWSCognitoIdentityProvider()
        identityProvider.adminAddUser(toGroup: request!).continueWith { (task) -> Any? in
            DispatchQueue.main.async(execute: {
                if let error = task.error {
                    print("\(error.localizedDescription)")
                }
            })
        }
    }

用户注册没有问题,我可以确认用户注册的信息。 但是,用户名只是没有出现在GroupA中。

有人可以告诉我我的代码有什么问题吗? 谢谢!!

1 个答案:

答案 0 :(得分:-1)

我假设您遇到类似AWSCognitoIdentityProviderErrorNotAuthorized的错误。因为这是一个“管理员” API调用,如此处建议的那样“需要开发人员凭据” [1]。

我建议您对凭据进行硬编码,以测试此API调用是否首先起作用

AWSStaticCredentialsProvider *credentialsProvider = [AWSStaticCredentialsProvider credentialsWithAccessKey:"your-access-key" secretKey:"your-secret-key"];
AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];
[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;

请注意,不要在生产环境中对凭据进行硬编码。

2019年7月21日更新:

let staticCredentialProvider = AWSStaticCredentialsProvider.init(accessKey: "yourAccessKey", secretKey: "yourSecretKey")
let configuration = AWSServiceConfiguration.init(region: .APSoutheast2, credentialsProvider: staticCredentialProvider)
AWSServiceManager.default()?.defaultServiceConfiguration = configuration

let request = AWSCognitoIdentityProviderAdminAddUserToGroupRequest()
request?.groupName = "GroupA"
request?.userPoolId = "ap-southeast-2_xxxxxxxxx"
request?.username = "yourUserName"


    AWSCognitoIdentityProvider.default().adminAddUser(toGroup: request!).continueWith { (task) -> Any? in
        DispatchQueue.main.async(execute: {
            if let error = task.error {
                print("\(error.localizedDescription)")
            }
        })
    }

我已经测试过,上面的代码正在我的测试环境中工作。我在这里列出供您参考。下一步将尝试从代码库中删除硬编码的凭据。可以使用Cognito身份池获取临时凭证,而不是使用AWSStaticCredentialsProvider。我认为,如果没有足够的许可,此流程可以在没有开发人员凭证的情况下工作。

参考: [1] https://aws-amplify.github.io/aws-sdk-ios/docs/reference/Classes/AWSCognitoIdentityProvider.html#//api/name/adminAddUserToGroup: [2] https://aws.amazon.com/blogs/mobile/how-amazon-cognito-keeps-mobile-app-users-data-safe/