1

我想将AWS Cognito集成到我的移动应用程序中并主要使用Facebook和Google登录,并且一旦用户登录,他就可以从S3上载/下载文件并与其交互DynamoDB也是如此。我还希望特定用户的cognitoID成为DynamoDB中识别每个用户的主键。 首先,这是一个好主意,保持用户识别每个用户的认证ID(IdentityID)?使用Cognito通过Facebook登录后无法获取身份ID

其次,当我尝试使用getIdentityID从sharedInstance拿到身份ID,在以下

// Retrieve your Amazon Cognito ID 
credentialsProvider.getIdentityId().continueWithBlock { (task: AWSTask!) -> AnyObject! in 
if (task.error != nil) { 
print("Error: " + task.error.localizedDescription) 
} 
else { 
// the task result will contain the identity id 
let cognitoId = task.result 
} 
return nil 
} 

的行或多或少我没有得到所需要的IdentityID,而是我得到一个零和因此不能坚持。 我错过了什么吗? 如果您需要更多信息,请让我知道。

回答

1

如果你不打算合并登录,那应该是绝对安全的。一旦通过身份验证,唯一一次身份可能发生变化的情况是登录被合并。如果是这样,仍然可以使用您构建的挂钩进行管理,该挂钩将数据从旧标识标识移至新标识。

这对我来说看起来很好(这正是启动代码的示例)。根据the Cognito docs,getIdentityId是异步调用。如果您的提供商已经设置了身份标识,则可以调用credentialsProvider.identityId来检索该身份,该身份将在本地缓存。但是,如果您的提供者没有设置身份标识,则调用credentialsProvider.identityId将返回nil。我猜你的问题是这样的。

如果你确信这不是问题,我想证实,在我们的文档的例子,以及客户端被初始化:

 
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "IDENTITY_POOL_ID") 
let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider) 
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 
+0

我使用ClientManager作为 [链接](HTTPS给出://github.com/awslabs/aws-sdk-ios-samples/blob/master/CognitoSync-Sample/Swift/CognitoSyncDemo/AmazonClientManager.swift) 在我的项目中,这里上面的代码在功能 initializeClients 。 并在一些其他viewController访问身份ID我尝试了两个 AmazonClientManager.sharedInstance.credentialsProvider?.identityId和我的问题给出的,都给我零。 –

+0

尝试一些基本的东西。如上所述初始化客户端,在该客户端上调用刷新,等待几秒钟,然后检查它。那么它是否设置? –

相关问题