2016-05-26 27 views
8

Non riesco a capire come leggere FIRAuthErrorNameKey nella nuova versione di Firebase. Quanto segue è quello che ho finora, ma la riga "let errorCode = FIRAuthErrorNameKey" non è corretta. Dalla lettura del Firebase documentation ho anche provato ad accedere al codice di errore da userInfo, ma non ho avuto successo e sono fuori dalle idee.Lettura errore di autenticazione Firebase generata (Firebase 3.xe Swift)

// Send request to Firebase to add user to register user 
FIRAuth.auth()?.createUserWithEmail(emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in 

     // Check for errors and respond to user accordingly. 
     if error != nil { 

      let errorCode = FIRAuthErrorNameKey 

      switch errorCode { 

      case "FIRAuthErrorCodeEmailAlreadyInUse": 

       // Add logic accordingly 

      case ...: 

       // Add logic accordingly 

      case default: 

       // Add logic accordingly 
      } 
     } 
}) 

risposta

25

Prova questo. Questo funziona per me. Inoltre, dopo averlo incollato nel tuo progetto. Se è necessario vedere tutti i codici FIRAuthErrorCode. Passa il mouse su .ErrorCodeInvalidEmail quindi premi il tasto sinistro del mouse e ti mostrerà il resto.

In caso di problemi, fatemi sapere e cercate di aiutarvi. In bocca al lupo!

 FIRAuth.auth()?.createUserWithEmail(email, password: password) { (user, error) in 

      if error != nil { 

       if let errCode = FIRAuthErrorCode(rawValue: error!._code) { 

        switch errCode { 
         case .ErrorCodeInvalidEmail: 
          print("invalid email") 
         case .ErrorCodeEmailAlreadyInUse: 
          print("in use") 
         default: 
          print("Create User Error: \(error!)") 
        } 
       } 

      } else { 
       print("all good... continue") 
      } 
     } 
+1

Ha funzionato come un fascino! Grazie per l'aiuto e pensando a come trovare i codici di errore. Sfortunatamente non sono mai riuscito a capire come utilizzare i codici di errore String nella pagina della guida di Firebase (https://firebase.google.com/docs/auth/ios/errors), ma questo è il trucco! – Ben

+1

Firebase ha ora rimosso il 'FIR' di fronte alle loro chiamate. Quindi sarà semplicemente 'AuthErrorCode' – theblindprophet

+2

Sembra che abbiano leggermente modificato l'enumerazione degli errori. Se digiti 'case'. Allora vedrai tutti loro. – ffritz

1

Dal frammento sembra che si sta tentando di utilizzare il codice di errore e non il FIRAuthErrorNameKey nel vostro interruttore. In tal caso, ciò che si desidera utilizzare è il codice di errore dell'oggetto NSError restituito nel callback. Usa:

let errorCode = error.code 

In questo modo la variabile errorCode conterrà il codice di errore che è stato restituito e si può procedere con la gestione della tua errore logico.

+0

Grazie per l'idea per mettermi sulla strada giusta. Questo tecnicamente non ha funzionato con la mia configurazione sopra perché .code restituisce un int. Funzionerebbe rielaborando il mio codice per abbinare i codici di errore. Non riesco a trovarli nelle guide di Firebase, ma se segui l'approccio delineato da the_pantless_coder per vedere tutti i codici di errore nell'altra risposta puoi ottenere i codici di errore int lì. Grazie! – Ben

0

non so se questo aiuta, ma si può fare anche questo:

let errcode = FIRAuthErrorCode(rawValue: error!._code) 
    if errcode == FIRAuthErrorCode.errorCodeRequiresRecentLogin{ 

      //do error handling here 

    } 
5

Firebase ha cambiato il codice un po ', e se siete nuovi a Firebase Ci vorranno un po' di tempo far funzionare il tuo codice. Ho passato quasi 3 ore a capire cosa sta succedendo. Ecco come appare ora:

Auth.auth().createUser(withEmail: email, password: password) { (user: User?, error) in 

     if error != nil { 
     // Handle the error (i.e notify the user of the error) 

      if let errCode = AuthErrorCode(rawValue: error!._code) { 

       switch errCode { 
       case .invalidEmail: 
        print("invalid email") 
       case .emailAlreadyInUse: 
        print("in use") 
       default: 
        print("Other error!") 
       } 

      } 
     } 
8

Nessuna delle risposte sembrano essere up-to-date, ecco quello che faccio attualmente in 3.x Swift, FirebaseAuth 4.0.0

Auth.auth().signIn(withEmail: email, password: password) { (user, error) in 

     if let error = error as NSError? { 

      guard let errorCode = AuthErrorCode(rawValue: error.code) else { 

       print("there was an error logging in but it could not be matched with a firebase code") 
       return 

      } 

      switch errorCode { 

      case .invalidEmail: 

       print("invalid email") 

       //... 
Problemi correlati