2016-07-17 6 views
0

Bisher kann ich nur in der AWS-Dokumentation in Ziel C finden, wie dies zu tun ist, nicht schnell. Ich schaffe erfolgreich Benutzer in der User-Pool in swift mit dem folgenden Code:Wie können Sie einen Benutzer anmelden und seine Telefonnummer in Cognito-Benutzerpools in Swift überprüfen?

let userPool = AWSCognitoIdentityUserPool(forKey: "myApp") 

var name = AWSCognitoIdentityUserAttributeType() 
name.name = "name" 
name.value = nameEntry.text 

var phone = AWSCognitoIdentityUserAttributeType() 
phone.name = "phone_number" 
phone.value = "+1" + phoneNumberEntry.text! 

var email = AWSCognitoIdentityUserAttributeType() 
email.name = "email" 
email.value = emailEntry.text 

userPool.signUp("goats", password: passwordEntry.text!, userAttributes: [name, phone, email], validationData: nil) 

Doing den obigen Code ein Benutzer im Cognito Benutzer Pool schafft, wie erwartet.

Darüber hinaus sendet der obige Code erfolgreich einen Bestätigungscode an die angegebene Telefonnummer. Ich konnte diesen Bestätigungscode jedoch nicht erfolgreich an AWS zurücksenden und die Telefonnummer bestätigen. Ich habe die beiden folgenden Zeilen versucht, nachdem der Benutzer in der Benutzer Pool erstellt worden, von denen keines ändern sich die Telefonnummer prüft:

user.verifyAttribute("phone_number", code: verificationEntry.text!) 
user.confirmSignUp(verificationEntry.text!) 

für was es wert ich den Benutzer Variable die am Einstellung folgend, nachdem der Benutzer angemeldet hat:

self.user = userPool.getUser() 

Nichts davon funktioniert und Ziel c AWS Dokumentation ist nicht hilfreich. Irgendwelche Ideen, wie man die Telefonnummer des Benutzers überprüft? Danke

Antwort

0

Nach der Anmeldung sollten Sie bestätigen bestätigen, um den Benutzer zu bestätigen und markieren Sie das Telefon/E-Mail (wo Sie den Code erhalten haben).

Sie können den Benutzer dazu bringen, zu bestätigen, ob das Attribut als verifiziert markiert wurde.

S.S .: Wenn Sie Probleme haben, bitte PM Ihre Benutzer-Pool-ID, Benutzername und Anmeldezeitrahmen.

0

Sie sollten userPool.getUser(username: String), nicht userPool.getUser() verwenden.

In Ihrem Fall:

self.user = userPool.getUser(nameEntry.text) 

Andernfalls könnten Sie folgende Fehlermeldung erhalten.

[Debug] AWSURLResponseSerialization.m line:63 | -[AWSJSONResponseSerializer responseObjectForResponse:originalRequest:currentRequest:data:error:] | Response body: 
{"__type":"InvalidParameterException","message":"2 validation errors detected: Value at 'username' failed to satisfy constraint: Member must have length greater than or equal to 1; Value at 'username' failed to satisfy constraint: Member must satisfy regular expression pattern: [\\p{L}\\p{M}\\p{S}\\p{N}\\p{P}]+"} 
0

Sie müssen den Benutzer angeben, an den der Bestätigungscode gesendet wurde. Also benutze getUser() mit dem Benutzernamen. Dann rufst du confirmSignUp() an.

0
@IBAction func confirmButtonPressed(_ sender: AnyObject) { 
    if confirmationCodeTextField.text != nil { 
     let pool = AWSCognitoIdentityUserPool(forKey: "UserPool") 
     let user: AWSCognitoIdentityUser = pool.getUser("userName") 
     user.confirmSignUp(confirmationCodeTextField.text!).continue(with: AWSExecutor.mainThread(), withSuccessBlock: { (task: AWSTask<AWSCognitoIdentityUserConfirmSignUpResponse>) -> Any? in 

      if task.error != nil { 
       // Error 
      } else { 
       // handle the success response 
      } 
      return nil 
     }) 
    } else { 
     // Ask user to enter the confirmation code. 
    } 
} 

Das obige Verfahren führt Sie zu bestätigen helfen dem Anwender anmelden. Beim Abrufen des Benutzers müssen Sie den "Benutzernamen" angeben. Dieser Code ist in swift 3 geschrieben.