Sto implementando l'autenticazione Firebase in un'applicazione web reattiva con react-router.Come rimuovere il nuovo firebase sul listenerAuthStateChanged in risposta
Un utente accede (at/signin) con Facebook o Google utilizzando l'accesso popup, quindi in caso di esito positivo si dirige all'app principale (/). Nel componente applicazione principale ascolto per un cambiamento di stato di autenticazione:
componentWillMount() {
this.authListener = this.authListener.bind(this);
this.authListener();
}
authListener ascolto per il cambio di autenticazione:
authListener() {
firebase.auth().onAuthStateChanged((user) => {
if (user) {
console.log('user changed..', user);
this.setState({
User: {
displayName: user.displayName
}
});
} else {
// No user is signed in.
browserHistory.push('/signin');
}
});
}
Tutto funziona bene, tranne quando i dati di login (e tornare a/signin) e accedi di nuovo usando Facebook o Google. Quindi viene visualizzato un messaggio di errore:
Avviso: setState (...): è possibile aggiornare solo un componente montato o montato.
Ho il sospetto che il listener onAuthStateChanged dall'app di accesso precedente ora non installata sia ancora in esecuzione.
C'è un modo per rimuovere il listener onAuthStateChanged quando il componente App smonta?
Qualsiasi idea di come rimuovere firebase.auth() .onAuthStateChanged? Il vecchio firebase aveva una funzione .off() – user2248331
Sì, fa parte del vecchio firebase. La nuova documentazione è qui: https://firebase.google.com/docs/reference/js/firebase.auth.Auth#onAuthStateChanged ma non riesco a capire come utilizzare opt_completed ... – user2248331
opt_completed come funzione di callback che sarà chiamato quando l'ascoltatore viene rimosso. È pensato per la logica di pulizia sulla rimozione del listener da Firebase. –