【问题标题】:AWS Cognito not creating an authenticated user with DigitsAWS Cognito 未使用 Digits 创建经过身份验证的用户
【发布时间】:2016-10-29 20:52:00
【问题描述】:

我正在尝试使用 Amazon Cognito 和 Twitter Digits 对用户进行身份验证。当我创建用户时,会创建一个与 Digits 登录没有任何连接的未经身份验证的用户。

这是我的代码:

   override func viewDidLoad() {
        super.viewDidLoad()

        let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast1, identityPoolId:"us-east-1:1b21eda6-56e8-4094-a7af-XXXXXXXXXXXX")
        let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider)
        AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration

        let authButton = DGTAuthenticateButton(authenticationCompletion: { (session: DGTSession?, error: NSError?) in
            if (session != nil) {

                let value = (session!.authToken)! + ";" + (session!.authTokenSecret)!
                credentialsProvider.logins = ["www.digits.com" : value]

                credentialsProvider.getIdentityId().continueWithBlock({ (task) -> AnyObject? in
                    print(task.result)
                    print(task.error)

                    return nil
                })

                self.saveNumber((session?.phoneNumber)!)

            } else {
                print("Authentication error: \(error!.localizedDescription)")
            }
        })
        authButton.center = self.view.center
        self.view.addSubview(authButton)
    }

还有saveNumber的代码:

func saveNumber(number : String) {

        let syncClient = AWSCognito.defaultCognito()
        let dataset = syncClient.openOrCreateDataset("userInfo")

        dataset.setString(number, forKey: "phoneNumber")
        dataset.synchronize().continueWithBlock { (task) -> AnyObject? in

            if task.error != nil {
                print("Uh Oh")
                print(task.error?.localizedDescription)
            }else{
                print("Yay!")
            }
            return nil
        }

    }

有什么想法吗?谢谢!

【问题讨论】:

  • 您使用的是哪个 SDK 版本?您能否打开详细日志记录并确认登录映射在调用 GetCredentialsForIdentity 时已发送到服务? docs.aws.amazon.com/mobile/sdkforios/developerguide/… 有可能您在获取凭据后将登录名与 credentialsProvider 相关联,因此身份未经身份验证。
  • @behrooziAWS 我使用的是 2.4.0 版。我在日志中看到的关于 credentialsProvider 的唯一内容是:2016-06-27 18:12:23.354[23815:2089794] AWSiOSSDK v2.4.0 [Warn] AWSCognitoIdentityService.m line:173 | __48+[AWSCognitoIdentity internalInitializeIfNeeded]_block_invoke | Could not find valid 'AWSDefaultRegionType', 'AWSCognitoRegionType', and 'AWSCognitoIdentityPoolId' values in info.plist. Unable to set the default Cognito credentials provider and service configuration. Please follow the instructions on this website...

标签: ios swift amazon-cognito twitter-digits


【解决方案1】:

鉴于您在 cmets 中的错误消息“无法设置默认 Cognito 凭据提供程序和服务配置”,您似乎正在尝试在它之前使用 credentialsProvider配置正确。将初始化凭据提供程序的代码移动到 AppDelegate 中的 didFinishLaunchingWithOptions。您可以通过以下方式访问 viewDidLoad 中的凭据提供程序:

AWSServiceManager.defaultServiceManager.defaultServiceConfiguration.credentialsProvider

同样通过日志记录,确保您在调用任何需要凭据的操作(例如 dataset.synchronize())之前设置了登录映射。

【讨论】:

  • 对于AWSServiceManager.defaultServiceManager.defaultServiceConfiguration.credentialsProvider.credentialsProviderAWSCredentialsProvider,而不是AWSCognitoCredentialsProvider,它没有设置登录的选项。
  • 你应该可以投了。
猜你喜欢
  • 2016-01-17
  • 2019-08-25
  • 2019-09-25
  • 2018-01-07
  • 2017-01-02
  • 2015-05-10
  • 2019-01-29
  • 2018-03-29
  • 2018-01-16
相关资源
最近更新 更多