Ich bin so nah an diesen Teil meines Projekts zu erreichen. Ich habe viel gelernt, aber ich kann es einfach nicht sehen. Was ich versuche, ist im Wesentlichen zu überprüfen, ob eine E-Mail-Adresse bereits von einem anderen Benutzer verwendet wird. Um dies zu erreichen, verwende ich diesen Code:iOS Async Aufgabe Problem beim Zurückgeben Firebase Benutzernamen
func emailCheck(input : String, result:(canRegister: Bool?) -> Void){
var canRegister : Bool?
FIRAuth.auth()?.signInWithEmail(input, password: " "){(user, error) in
if error != nil {
if(error?.code == 17009){
print("Wrong Password")
canRegister = false
}else if(error?.code == 17011){
print("Unknown User")
canRegister = true
}else{
canRegister = false
}
}
}
}
Diese ganze Async
Sache nur 6 Stunden alt für mich ist, also, wenn Sie irgendwelche Vorschläge haben, bitte lassen Sie mich wissen. Aber diese Funktion wird dann aufgerufen, wenn eine Taste gedrückt wird, nur durch dies zu tun:
print(emailCheck(emailTxt.text!){(canRegister : Bool?) -> Void in})
Aus irgendeinem Grund, diese leer zurückkehrt, nicht true
, false
oder sogar nil
. Es gibt nur ()
zurück Es gibt jedoch Wrong Password
zurück, wenn ich das richtige Passwort passiere, nicht ganz sicher, ob das relevant ist. Kann jemand damit Hand anlegen? Danke an alle!
Added Info Nach Vorschlägen der Code und der Verweis auf den Code sieht nun wie folgt aus: (nur wichtige Teile enthalten)
class LoginViewController: UIViewController {
@IBAction func nextScreen(sender: UIButton) {
emailCheck(emailTxt.text!) { isValid in
if isValid {
print("Valid!")
} else {
print("Invalid!")
}
}
}
func emailCheck(input: String, callback: (isValid: Bool) -> Void) {
FIRAuth.auth()?.signInWithEmail(input, password: "") { (user, error) in
var canRegister = false
if error != nil {
if (error?.code == 17009) {
//wrong password error
} else if(error?.code == 17011) {
//email doesn't exist
canRegister = true
}
}
callback(isValid: canRegister)
}
}
Der obwohl Prozess dahinter ist, dass, wenn der Code zurückgegeben wird, dass der Benutzer nicht existiert, dann ist das E-Mail-Konto offen, so dass canRegister
erlaubt wird, andernfalls, wenn das leere Passwort falsch eingegeben wurde, dann wissen wir, dass das Konto existiert und daher nicht für die Registrierung geöffnet ist verwenden. Derzeit canRegister
gibt den Wert gleich, was es wie hier definiert ist:
var canRegister = false
Zurück im Funktionsaufruf.
Der aktualisierte Code mir richtig aussieht. Aus irgendeinem Grund scheint es, dass Sie von Firebase keinen Fehlercode 17011 erhalten. Wenn ich mir ihre Dokumente ansehe, denke ich, dass sich ihre API nicht so verhält, wie Sie es erwarten. Laut [dieser Seite] (https://firebase.google.com/docs/reference/ios/firebaseauth/interface_f_i_r_auth_errors) ist der Fehler "FIRAuthErrorCodeUserNotFound" (der dem von Ihnen verwendeten Code 17011 entspricht) _ "Gibt an, dass das Benutzerkonto nicht vorhanden war Das kann passieren, wenn der Benutzeraccount gelöscht wurde. "_ Es ist mir nicht klar, ob das der einzige Fall ist, in dem dieser Fehler ausgelöst wird ... – dbburgess
In jedem Fall, um mehr auf die Wurzel von dem zu bekommen, was Sie versuchen tu ... Es sieht so aus, als würdest du versuchen, mit etwas fertig zu werden, das sie für dich behandeln. Die [docs] (https://firebase.google.com/docs/reference/ios/firebaseauth/interface_f_i_r_auth.html#aeaee7fcef878990954f8e72f7278cd7d) für die 'createUserWithEmail'-Methode sagen, dass sie einen 'FIRAuthErrorCodeEmailAlreadyInUse'-Fehler auslösen kann, was so aussieht ist was du versuchst mit dir selbst umzugehen. Warum nicht einfach versuchen, es zu erstellen und stattdessen diesen Fehler zu behandeln? – dbburgess
@dbburgess Sie wissen, was es war? Mir fehlte ein Leerzeichen in dieser Zeile: '... signInWithEmail (input, password:" ") ...' Da 'password' keinen Platz hatte, wurde es von der firebase nicht als leeres Passwort gelesen, sondern eher wie ein 'nil', das würde dann keinen Fehler werfen. Danke für all deine Hilfe! – Ethan