2016-04-19 11 views
8

Ho un'app ionic2 e sto usando Firebase e angularFire2. Mi piacerebbe ottenere lo stato di autenticazione corrente e l'oggetto/utente corrente da Firebase usando angularFire2.Come accedere al login stato/utente di angularfire2

Ecco cosa funziona finora: posso autenticare l'utente e iscriversi a FirebaseAuthState per ottenere l'oggetto utente di Facebook.

constructor(platform: Platform, private auth: FirebaseAuth) { 

    auth.subscribe((user: FirebaseAuthState) => { 
     if (user) { 
     // I could store user in localstorage, but I'd like to see an All Firebase solution 
     this.rootPage = TabsPage; 
     } else { 
     this.rootPage = LoginPage; 
     } 
    }); 

Ora posso solo impostare localstorage qui e memorizzare l'oggetto utente nella cache per ricordare lo stato di autenticazione. Tuttavia, sono curioso di vedere come posso utilizzare Firebase solo senza che io implementi la mia chiave di archiviazione locale personalizzata. Vedo che Firebase memorizza una chiave localStorage di sua proprietà, quindi sa che è loggato.

Come posso ottenere l'oggetto auth dal codice? Inoltre, ho provato l'esempio elencato nella documentazione di AngularFire2 per il rendering dello stato di autenticazione nel modello, ma mi dà un errore.

import {FirebaseAuth} from 'angularfire2'; 
@Component({ 
    selector: 'auth-status', 
    template: ` 
    <div *ng-if="auth | async">You are logged in</div> 
    <div *ng-if="!(auth | async)">Please log in</div> 
    ` 
}) 
class App { 
    constructor (@Inject(FirebaseAuth) public auth: FirebaseAuth) {} 
} 

risposta

4

attuale stato di autenticazione è disponibile dal iniettato FirebaseAuth. È possibile ottenere i dati effettivi auth auth.getAuth()

See: https://github.com/angular/angularfire2/blob/master/src/providers/auth.ts#L99

+2

. ge Il metodo tAuth verrà rimosso. È necessario utilizzare il metodo auth subscribe per verificare lo stato di autenticazione. – afmeva

+0

@afmeva Come ottenere l'utente Info quindi? – sandrooco

+1

@Sandrooco ho appena aggiunto una risposta. Spero che funzioni per voi – afmeva

15

ora, al fine di ottenere le informazioni utente, è necessario iscriversi per ottenere le informazioni di autenticazione. Ex

constructor(public af: AngularFire) { 
    this.af.auth.subscribe(auth => console.log(auth));// user info is inside auth object 
    } 

oggetto auth sarà nullo se autenticazione stato non esiste

+0

Sì, questo è il mio approccio alla mia domanda: http://stackoverflow.com/questions/39205045/angularfire2-proper-approach-to-check- if-user-is-logged-in Ma non sono sicuro se sia l'approccio giusto ... – sandrooco

+0

sì, lo è. Questo è l'approccio di angularfire2 doc. Penso che se vuoi fare qualche trasformazione sui dati di autenticazione devi usare operatori osservabili come map, flatmap. Tuttavia, dal momento che si desidera solo verificare le informazioni dell'utente questo approccio va bene. – afmeva

+0

Hai questo codice nella funzione di costruzione per ogni pagina che richiede informazioni utente? o memorizzare i dati utente in storage/localStorage e recuperarli successivamente? Nel mio caso, quasi tutte le pagine richiedono i dati utente (uid) per articoli simili/commenti, quindi mi chiedo se ci siano modi efficaci per recuperare i dati dell'utente? –

15
  1. Importa: import { AngularFireAuth } from 'angularfire2/auth';
  2. Iniezione: constructor(public afAuth: AngularFireAuth) { }
  3. Check:

    this.afAuth.authState.subscribe(res => { 
        if (res && res.uid) { 
        console.log('user is logged in'); 
        } else { 
        console.log('user not logged in'); 
        } 
    }); 
    
+0

Dopo un sacco di tutorial confusi che uniscono 'AngularFire2' e' firebase' questo è ciò che ha funzionato dopo aver letto su firebase.auth(). OnAuthStateChanged' dai documenti ufficiali di Firebase. – rtpHarry

+0

Ho davvero bisogno di scrivere questa roba in ogni singolo componente per scrivere questa roba in una variabile osservabile? non c'è un modo semplice per accedere senza così tanto codice in più in ogni singolo componente questa informazione? – Budi

+0

@Budi No. Puoi semplicemente scriverlo una volta in un servizio. Il servizio sottoscrive il cambiamento di stato, quindi puoi impostare alcune variabili di stato che sono utili per rappresentare le informazioni di autorizzazione pertinenti per i tuoi componenti. Quindi puoi inserire questo servizio nei tuoi componenti. –

Problemi correlati