【问题标题】:Generating AWS creditials through Cognito Using Swift iOS App使用 Swift iOS 应用程序通过 Cognito 生成 AWS 信用证
【发布时间】:2015-05-29 16:34:45
【问题描述】:

尝试遵循 amazon-cognito 网站上设置的示例,以从 iOS 上的 facebook 登录获取 AWS 凭证。我正在尝试将 Objective C 转换为 swift 并在设置凭据提供程序的登录时遇到问题。

(http://docs.aws.amazon.com/mobile/sdkforios/developerguide/cognito-auth.html) 在“使用 Facebook”下

在我的 viewController 中我尝试:

    let token = FBSession.activeSession().accessTokenData.accessToken

    let credentialsProvider : AWSCredentialsProvider = AWSServiceManager.defaultServiceManager().defaultServiceConfiguration.credentialsProvider

    credentialsProvider.logins = NSDictionary(dictionary: [AWSCognitoLoginProviderKey.Facebook: token])

但在第三行 xCode 声明 AWSCredentialsProvider 没有“登录”字段,尽管教程使它看起来如此。

感谢您的帮助! 我假设我错误地获取了 credentialsProvider。

【问题讨论】:

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


    【解决方案1】:

    AWSCredentialsProvider 协议未定义 login 属性。您需要将凭据提供程序转换为 AWSCognitoCredentialsProvider 才能访问它。另一种选择是保留对AWSCognitoCredentialsProvider 实例的引用以供您自己更新属性。

    【讨论】:

      【解决方案2】:

      我认为这样做的方法是编写一个自定义提供程序:一个实现 AWSIdentityProviderManager 协议的类:http://docs.aws.amazon.com/AWSiOSSDK/latest/Protocols/AWSIdentityProviderManager.html

      这个协议基本上有一种方法,“登录”,您可以使用它来返回您的 NSDictionary 凭据。所以代替这行代码:

      let credentialsProvider : AWSCredentialsProvider = AWSServiceManager.defaultServiceManager().defaultServiceConfiguration.credentialsProvider
      

      您将设计一个自定义类(其中大部分直接来自 AWS 文档):

      class MyIdentityProvider: NSObject, AWSIdentityProviderManager {
      
      func logins() -> AWSTask<NSDictionary> {
        if let token = FBSDKAccessToken.current() {
          return AWSTask(result: [AWSIdentityProviderFacebook:token])
        }  
        return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"]))
      }
      

      然后您使用您的自定义类实例化您的 AWSService 管理器:

      let identityProvider = MyIdentityProvider()
      let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .usEast1,
           identityPoolId: "<your poolId>",
           identityProviderManager: identityProvider)
      let configuration = AWSServiceConfiguration(region:.usEast1, credentialsProvider:credentialsProvider)
      AWSServiceManager.default().defaultServiceConfiguration = configuration
      

      请参阅此 SO 答案中的示例(相关问题):[iOS][AWS Cognito] 'logins' is deprecated: Use "AWSIdentityProviderManager"

      【讨论】:

        猜你喜欢
        • 2015-12-04
        • 2017-02-25
        • 2017-01-10
        • 2017-12-03
        • 2019-07-15
        • 2021-09-28
        • 2016-12-11
        • 2022-06-12
        • 2018-12-01
        相关资源
        最近更新 更多