什么是AWS Cognito用户池自定义身份验证流程的iOS API?

时间:2018-01-17 11:31:56

标签: ios aws-cognito

亚马逊docs docs概述了其自定义身份验证流程的工作原理。但是只有iOS的提及。

我有一个使用AWS用户池及其自定义身份验证流程的工作身份验证系统,使用Python触发器和iOS Swift应用程序。

但是有一个细节仍然让我感到不安 - 请看代码后的评论。

AWSCognitoIdentityCustomAuthentication处理程序中我得到了这个:

func getCustomChallengeDetails(_ authenticationInput: AWSCognitoIdentityCustomAuthenticationInput, customAuthCompletionSource: AWSTaskCompletionSource<AWSCognitoIdentityCustomChallengeDetails>) {

    self.customAuthenticationCompletion = customAuthCompletionSource

    if authenticationInput.challengeParameters.count > 0 {
        DispatchQueue.main.async {

            if let code = self.codeTextField.text {
                let details = AWSCognitoIdentityCustomChallengeDetails(
                    challengeResponses: ["CODE" : code])
                details.initialChallengeName = "CUSTOM_CHALLENGE"

                customAuthCompletionSource.set(result: details)
            }
        }
    }

    func didCompleteStepWithError(_ error: Error?) {
        // handling code
    }
}

getCustomChallengeDetails()的第一次调用有challengeParameters的空列表。第二个调用具有正确填充的challengeParameters

方法didCompleteStepWithError(_ error: Error?)误导了我,因为我认为它仅在发生错误时调用,但实际上也会在error设置为nil时成功调用。

我还有一个UIViewController,提示用户输入他们已通过我的服务器代码发送的CODE。当用户提交CODE时,我称之为:

if let code = codeTextField.text {
        let details = AWSCognitoIdentityCustomChallengeDetails(
            challengeResponses: ["CODE" : code])
        details.initialChallengeName = "CUSTOM_CHALLENGE"

        self.customAuthenticationCompletion?.set(result: details)
        DispatchQueue.main.async {
            self.dismiss(animated: true, completion: nil)
        }
    }

这很有效。服务器代码将对输入正确CODE值的用户进行身份验证,但拒绝为CODE提交错误值的用户。

但为什么两个customAuthenticationCompletion?.set(result: details)来电? 谁能说我在哪里做了一个失误?

0 个答案:

没有答案