亚马逊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)
来电?
谁能说我在哪里做了一个失误?