【问题标题】:Integrating Congnito User Pools with Amazon Cognito Identity将 Cognito 用户池与 Amazon Cognito 身份集成
【发布时间】:2016-09-26 06:59:04
【问题描述】:

我正在使用 Xcode(Swift)。我尝试编写将注册、确认用户并将用户登录到用户池的代码。然后在成功登录后,我希望它与 Amazon Cognito Identity 相关联。基本上,我希望在用户池中拥有与用户一样多的身份 ID。

到目前为止,我能够注册、确认用户并登录(使用显式登录)。登录成功后,我正在尝试将此用户链接到 Cognito 身份池,以便可以为该用户生成唯一 ID。

目前,如果我以其他用户身份登录应用程序,则会为其分配与前一个用户相同的身份 ID。换句话说,无论我的用户池中有多少用户,在 AWS Cogntio 联合身份池端,我只有一个身份 ID。理想情况下,它应该为不同的用户创建单独的身份 ID。

以下是 didFinishLaunchingWithOptions 函数中 App 委托中的代码。

let serviceConfiguration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: nil)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = serviceConfiguration
let configurationUserPool = AWSCognitoIdentityUserPoolConfiguration.init(clientId: "####", clientSecret: "####", poolId: "####")
AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: configurationUserPool, forKey: "testPool")
self.userPool = AWSCognitoIdentityUserPool(forKey: "testPool")

以下是登录视图控制器中的代码。

@IBAction func signIn(sender: AnyObject) {

    let user = self.userPool.getUser(userName.text!)

    user.getSession(userName.text!, password: password.text!, validationData: nil, scopes: nil).continueWithExecutor(AWSExecutor.mainThreadExecutor(), withBlock: {
        (task:AWSTask!) -> AnyObject! in

        if task.error != nil {
            print(task.error)
        } else {
            print("Successful Login")

            let cp = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "######", identityProviderManager:self.userPool)
            let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: cp)

            AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration                
            cp.getIdentityId().continueWithBlock { (task: AWSTask!) -> AnyObject! in

                if (task.error != nil) {
                    print("Error: ")

                } else {
                    // the task result will contain the identity id
                    print("Success with id")
                    print(task.result)
                }
                return nil
            }

            dispatch_async(dispatch_get_main_queue()){
               // do stuff here ...
            }
        }
        return nil
    })
}

【问题讨论】:

    标签: swift amazon-web-services amazon-cognito


    【解决方案1】:

    最后,我能够纠正这个问题。问题是每次我登录一个新用户时,我都在重置凭据提供程序。当我将它移至 App Delegate 时,它​​开始按应有的方式工作。

    这不应该在signIn函数中,而应该是App Delegate。

    let cp = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "######", identityProviderManager:self.userPool)
    let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: cp)
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration                
    

    正确的方式。

    let serviceConfiguration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: nil)
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = serviceConfiguration
    let configurationUserPool = AWSCognitoIdentityUserPoolConfiguration.init(clientId: "####", clientSecret: "####", poolId: "####")
    AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: configurationUserPool, forKey: "testPool")
    self.userPool = AWSCognitoIdentityUserPool(forKey: "testPool")
    self.cp = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "######", identityProviderManager:self.userPool)
    let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: self.cp)
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration                
    

    【讨论】:

    • 能否请您提供您用来构建它的任何参考或文档。 Objective c 中有很多与用户池相关的教程,但很难找到任何 Swift 参考。
    • 我基本上已经实现了这一点,但我仍然发现所有用户仍然存储到同一个身份池中。我见过的所有其他解决方案都提到了自定义身份提供程序。
    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 2017-03-07
    • 2016-10-23
    • 2017-02-10
    • 2018-08-31
    • 1970-01-01
    • 2018-02-11
    • 2017-04-08
    相关资源
    最近更新 更多