2016-06-26 13 views
13

Uso le funzioni Firebase su Android e Firebase Auth.Firebase su Android: come verificare il motivo dell'autenticazione Firebase non riuscita?

Provo FirebaseAuth.signInWithEmailAndPassword e nel caso in cui non riesca voglio sapere "Perché il processo di signIn è fallito?"

Il metodo signInWithEmailAndPassword ha l'API addOnFailureListener. E posso prendere il Exception (forse FirebaseAuthException) nel metodo di richiamata onFailure.

auth.signInWithEmailAndPassword(loginRequest.id, loginRequest.password) 
    .addOnFailureListener(new OnFailureListener() { 
    @Override 
    public void onFailure(@NonNull Exception e) { 
     if (e instanceof FirebaseAuthException) { 
     ((FirebaseAuthException) e).getErrorCode()); 
     } 
    } 
    }); 

Desidero sapere perché il processo SignIn ha avuto esito negativo. in onFailure.

penso che potrebbe essere fatto come segue:

  1. e tipo di istanza di controllo (e instanceof FirebaseAuthInvalidUserException o FirebaseAuthInvalidCredentialsException o ,,,)
  2. e.getErrorCode()

Non voglio digitare assegni (è sporco).
Preferisco il modo nella scelta 2. sopra. Ma non sono riuscito a trovare la definizione della collezione di valori di ritorno e.getErrorCode(). es ERROR_INVALID_EMAIL, ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL, ecc (Dove sono definite?)

Ti prego, dimmi che è il modo migliore per controllare il motivo Firebase auth failed.

Grazie.

risposta

7

Avevo gli stessi dubbi e ho trovato un po 'più di informazioni sulla loro documentazione.

Per esempio in si utilizza questo metodo createUserWithEmailAndPassword si può vedere sul loro documentation page le seguenti eccezioni:

Eccezioni:

FirebaseAuthWeakPasswordException gettato se la password non è abbastanza forte FirebaseAuthInvalidCredentialsException generata se l'e-mail l'indirizzo non è corretto FirebaseAuthUserCollisionException generato se esiste già un account con l'indirizzo email specificato

Per ogni eccezione c'è anche una pagina di documentazione, ad esempio quello per FirebaseAuthUserCollisionException

e qui potete vedere i diversi tipi di errore:

ERROR_EMAIL_ALREADY_IN_USE quando si cerca di creare un nuovo account con createUserWithEmailAndPassword (String, String) o per modificare l'indirizzo email di un utente, se l'e-mail è già utilizzata da un altro account ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL quando si chiama signInWithCredential (AuthCredential) con una credenziale che asserisce un indirizzo e-mail in uso da un altro account. Questo errore verrà generato solo se l'impostazione "Un account per indirizzo e-mail" è abilitata nella console Firebase (consigliato). ERROR_CREDENTIAL_ALREADY_IN_USE quando si cerca di collegare un utente con un AuthCredential corrispondente a un altro account già in uso

Quindi, se si fa un getErrorCode() e confrontare la stringa con una qualsiasi di queste costanti si sa esattamente la causa dell'eccezione.

Spero che aiuti.

7

Ho trovato alcuni codici nella libreria Firebase che è simile ai messaggi di errore visti finora. Ma non ho ancora provato. Puoi provare.

("ERROR_INVALID_CUSTOM_TOKEN", "The custom token format is incorrect. Please check the documentation.")); 
    ("ERROR_CUSTOM_TOKEN_MISMATCH", "The custom token corresponds to a different audience.")); 
    ("ERROR_INVALID_CREDENTIAL", "The supplied auth credential is malformed or has expired.")); 
    ("ERROR_INVALID_EMAIL", "The email address is badly formatted.")); 
    ("ERROR_WRONG_PASSWORD", "The password is invalid or the user does not have a password.")); 
    ("ERROR_USER_MISMATCH", "The supplied credentials do not correspond to the previously signed in user.")); 
    ("ERROR_REQUIRES_RECENT_LOGIN", "This operation is sensitive and requires recent authentication. Log in again before retrying this request.")); 
    ("ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL", "An account already exists with the same email address but different sign-in credentials. Sign in using a provider associated with this email address.")); 
    ("ERROR_EMAIL_ALREADY_IN_USE", "The email address is already in use by another account.")); 
    ("ERROR_CREDENTIAL_ALREADY_IN_USE", "This credential is already associated with a different user account.")); 
    ("ERROR_USER_DISABLED", "The user account has been disabled by an administrator.")); 
    ("ERROR_USER_TOKEN_EXPIRED", "The user\'s credential is no longer valid. The user must sign in again.")); 
    ("ERROR_USER_NOT_FOUND", "There is no user record corresponding to this identifier. The user may have been deleted.")); 
    ("ERROR_INVALID_USER_TOKEN", "The user\'s credential is no longer valid. The user must sign in again.")); 
    ("ERROR_OPERATION_NOT_ALLOWED", "This operation is not allowed. You must enable this service in the console.")); 
    ("ERROR_WEAK_PASSWORD", "The given password is invalid.")); 
+0

C'è qualche costante di stringa statica pubblica disponibile per quei codici di errore? (ad esempio FirebaseAuthUserCollisionException.ERROR_EMAIL_ALREADY_IN_USE) – shaunkawano

+0

non penso. la corretta implementazione è come nella risposta di @ Lancelot. e la tua prima opzione. Non è sporco e meglio gestire ogni eccezione separatamente. anche se scegli il secondo, gestirai ogni caso. sembra la stessa quantità di codice. – uguboz

+0

Grazie per le tue informazioni, anche se suppongo che il valore costante di String dichiarato sia molto più sicuro e più facile rispetto al valore di digitazione della stringa da solo, poiché il completamento automatico salverà il tuo tempo se la costante è già dichiarata e la digitazione può accadere se devi scrivere quelle corde da soli. – shaunkawano

1

Dopo aver abilitato correttamente il metodo di autenticazione email + password, sarà necessario creare un'applicazione per il funzionamento del progetto Firebase.

Vai a: Panoramica -> Aggiungi un'altra app -> Segui i passaggi successivi in ​​base alle tue esigenze.

Spero che aiuti tutti. Saluti!

Problemi correlati