2017-02-09 5 views
0

У меня возникли трудности с захватом ошибки регистрации Cognito. Я пытаюсь предупредить пользователя, когда Cognito возвращает сообщение «UsernameExistsException», «сообщение»: «Пользователь уже существует». Ошибка. Ниже мой код:AWS Cognito: попытка оповестить пользователя об ошибке

self.pool!.signUp(usernameTextField.text!, password: passwordTextField.text!, userAttributes: attributes, validationData: nil).continue(successBlock: { (task:AWSTask!) in 
       // needs to be async so we can ALWAYS return nil for AWSTask 
       DispatchQueue.main.async { 
        if task.error != nil { // some sort of error 
         let myerror = task.error 
         print("\(myerror)") 
         let alert = UIAlertController(title: "Sign Up Error", message: (task.error?.localizedDescription)! as String, preferredStyle: UIAlertControllerStyle.alert) 
         alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil)) 
         self.present(alert, animated: true, completion: nil) 
        } 
        else { 
         let response: AWSCognitoIdentityUserPoolSignUpResponse = task.result! as AWSCognitoIdentityUserPoolSignUpResponse 
         // NSLog("AWSCognitoIdentityUserPoolSignUpResponse: \(response)") 
         self.user = response.user 
         let alert = UIAlertController(title: "Sign Up Successful", message: "", preferredStyle: UIAlertControllerStyle.alert) 
         alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: { action in self.performSegue(withIdentifier: "confrimationSegue", sender: self) })) 
         self.present(alert, animated: true, completion: nil) 

        } 
       } 
       return nil 
      }) 

По некоторым причинам я не смог пробиться в task.error = ноль условный оператор!. Когда я заставляю ошибку, ошибка не печатается, и действие предупреждения не отображается в представлении. Я пытаюсь предупредить пользователя о неправильной функции? Как еще я могу проверить, что имя пользователя уже существует, представленное cognito. Заранее спасибо.

ответ

1

Вы используете successBlock, что означает, что выбранный вами блок будет вызываться только в том случае, если регистрация была успешно выполнена. Вот почему ошибка всегда nil.

Для того чтобы исправить эту ошибку, необходимо установить обратный вызов, просто что-то вроде следующего:

userPool 
    .signUp(user.email, password: user.password, userAttributes: attributes, validationData: nil) 
    .continue({ response in 
     if let error = response.error { 
      // Error ocurred 
     } else { 
      // No error ocurred 
     }) 

Этот метод по-прежнему только recieves обратного вызова и будет вызываться, когда происходит ошибка.

Смежные вопросы