首页 文章

将Congnito用户池与Amazon Cognito Identity集成

提问于
浏览
1

我正在使用Xcode(Swift) . 我尝试编写将注册,确认用户并登录用户到用户池的代码 . 然后,在成功登录后,我希望它与Amazon Cognito Identity链接 . 基本上,我希望在用户池中拥有尽可能多的用户身份ID .

到目前为止,我能够注册,确认用户并登录(使用显式登录) . 登录成功后,我尝试将此用户链接到Cognito Identity Pool,以便为该用户生成唯一ID .

目前,如果我以不同的用户身份登录应用程序,则会为其分配与前一个用户相同的身份标识 . 换句话说,无论我的用户池中有多少用户,在AWS Cogntio联合身份池方面,我只有一个身份标识 . 理想情况下,它应该为不同的用户创建单独的标识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")

以下是Sign View控制器中的代码 .

@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
    })
}

1 回答

  • 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
    

相关问题