AWS Cognito Swift 凭证提供商“不推荐使用登录:使用 AWSIdentityProviderManager”
Posted
技术标签:
【中文标题】AWS Cognito Swift 凭证提供商“不推荐使用登录:使用 AWSIdentityProviderManager”【英文标题】:AWS Cognito Swift credentials provider "logins is deprecated: Use AWSIdentityProviderManager" 【发布时间】:2016-10-02 12:24:47 【问题描述】:我试图允许用户使用 facebook 和 Amazon Cognito 注册我的应用程序。我发现以前的文档说要使用:
let token = FBSDKAccessToken.currentAccessToken().tokenString
var logins: NSDictionary = NSDictionary(dictionary: ["graph.facebook.com" : token])
credentialsProvider.logins = [AWSIdentityProviderFacebook: token]
但我收到不推荐使用登录的消息,并使用协议 AWSIdentityProviderManager 向凭据提供程序提供登录,我不知道该怎么做。 我试图让我的班级实现 AWSIdentityProviderManager 并创建了一个登录方法,因为我注意到 credentialsProvider 有一个方法“setIdentiyProviderManagerOnce(self)”,但我不知道在实现的 logins() 方法中要做什么来将 facebook 令牌连接到凭证经理。
我查看了亚马逊的 github 示例,但它们似乎没有多大帮助
【问题讨论】:
现在是 11 月,亚马逊官方文档没有更新。自不推荐使用登录方法以来已经有大约 6 个月的时间了,没有人会费心更新文档。我可以理解,因为亚马逊只是一家小型初创公司……哦,等等。 【参考方案1】:环顾四周后,我终于发现我不是唯一一个遇到这个问题的人。 AWS 在不更改主要文档的情况下更新了他们的 sdk。 解决方案是在自定义类中实现 AWSCognitoIdentityProviderManager 并将其提供给凭证提供者。 下面是 simaomi 在下面的 github 讨论中提供的代码(更多的是快速修复):
import Foundation
import AWSCore
import AWSCognito
import AWSCognitoIdentityProvider
class CustomIdentityProvider: NSObject, AWSCognitoIdentityProviderManager
var tokens : [NSString : NSString]?
init(tokens: [NSString : NSString])
self.tokens = tokens
@objc func logins() -> AWSTask
return AWSTask(result: tokens)
let customProviderManager = CustomIdentityProvider(tokens: logins!)
self.credentialsProvider = AWSCognitoCredentialsProvider(
regionType: Constants.COGNITO_REGIONTYPE,
identityPoolId: Constants.COGNITO_IDENTITY_POOL_ID,
identityProviderManager: customProviderManager)
sdk 示例展示了您应该如何真正实施解决方案
看这里的讨论: https://github.com/aws/aws-sdk-ios/issues/357
这里是更新的 sdk 示例: https://github.com/awslabs/aws-sdk-ios-samples/tree/developer-authenticated-identities-2-4/CognitoSync-Sample
【讨论】:
您是对的,您提供的示例/链接描述了在新版本的 SDK 中使用 setLogins 的替代方法。我们目前正在努力更新我们的文档。 @MarkMercurio - 您是否还计划更新博客以获取新流程?因为当我尝试创建新的用户池 Twitter 选项被禁用。还是我必须创建联合身份。 @MarkMercurio - 如果您也可以更新此页面,那就太好了:docs.aws.amazon.com/cognito/latest/developerguide/facebook.html。它最后一次更新是 2016 年 4 月 17 日,所以它不是很旧,但似乎已经过时了,因为使用 Swift 代码示例也给了我不推荐使用的错误。 @MarkMercurio - 任何在 Swift 中连接用户池和身份池的完整代码示例? 我们还需要这个解决方法吗?或者文档和 sdk 是否已完全更新以涵盖此问题?以上是关于AWS Cognito Swift 凭证提供商“不推荐使用登录:使用 AWSIdentityProviderManager”的主要内容,如果未能解决你的问题,请参考以下文章
AWS iOS SDK Cognito 开发人员身份验证 (Swift)
Python - 导出 AWS Cognito 用户池 - NoCredentialsError:无法找到凭证