2016-05-31 14 views
6

Ho un'app che utilizza Firebase come backend. La mia app implementa l'API di autenticazione Firebase utilizzando l'accesso e-mail e password semplici per l'autenticazione.Come mantenere la sessione utente dopo l'uscita dall'app in Firebase

Tutto funziona bene, tranne per un problema. Vorrei mantenere la sessione utente anche dopo che un utente ha chiuso l'app.

FIRAuth.auth() ?. currentUser? ha tutte le proprietà dell'utente (es: uid, email, token ecc ...) per l'utente corrente che funziona alla grande. Il problema che ho notato è che FIRAuth.auth() ?. currentUser? non è persistente Quindi, dopo aver chiuso l'app e avviato di nuovo, restituisce null.

Non vorrei chiedere a un utente ogni volta che aprono l'app per accedere nuovamente. C'è un modo per aggirare questo?

+1

Firebase persiste automaticamente il token dell'utente nel portachiavi iOS. Viene ripristinato automaticamente al riavvio dell'app. Puoi controllare ciò con 'addAuthStateDidChangeListener' (vedi la [documentazione di Firebase Authentcation] (https://firebase.google.com/docs/auth/ios/manage-users#get_the_currently_signed-in_user)). Se questo non è il problema, pubblica il [codice completo minimo che riproduce il problema] (http://stackoverflow.com/help/mcve). –

risposta

23

Firebase dovrebbe già tenere traccia del tuo utente tramite l'avvio di app.

Il problema potrebbe riguardare l'utilizzo di FIRAuth.auth()?.currentUser? direttamente anziché l'approccio consigliato.

Il metodo consigliato per ottenere l'utente corrente è impostando un ascoltatore sull'oggetto Auth:

FIRAuth.auth()?.addStateDidChangeListener { auth, user in 
    if let user = user { 
    // User is signed in. 
    } else { 
    // No user is signed in. 
    } 
} 

Utilizzando un ascoltatore, si assicura che l'oggetto Auth non è in una intermedio stato, ad esempio l'inizializzazione, quando si ottiene l'attuale utente .

Nella mia applicazione, io uso entrambi. Se l'utente non esiste con il primo metodo, passa al secondo e, in caso negativo, presenta la schermata di accesso/registrazione.

+1

Ah! Ho appena provato questo approccio e tu hai assolutamente ragione. Ho pensato che mi sarebbe dovuto mancare qualcosa. Grazie mille per aver risposto. – Lavvo

+0

Dove dovrei inserire questo conditon? Se non è in viewcontroller di accesso? –

+0

Ovunque tu preferisca. Ovunque sia necessario per ottenere l'utente corrente. Personalmente avvolgo tutto questo codice nelle mie classi. –

0

FirAuth è stato rinominato Auth

Utilizzare ultima pod Firebase