L'authentification Firebase ne persiste pas en tant qu'utilisateur connecté et chaque fois que je rafraîchis ou rouvre l'application, je dois me reconnecter.
J'ai essayé de définir la persistance sur local et le rappel vérifie son ensemble, mais la persistance ne fonctionne toujours pas
Pour définir la persistance que j'utilise ...
//set auth persistence
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL)
.then(function() {
console.log("successfully set the persistence");
})
.catch(function(error){
console.log("failed to ser persistence: " + error.message)
});
. . . Pour me connecter, j'utilise ce code
firebase.auth().signInWithEmailAndPassword(email, password)
.then((user) =>{
this.checkAccountStatus(user.uid, user.email);
})
.catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorMessage)
// ...
});
Et voici le code que j'utilise pour vérifier l'état de connexion ...
if (firebase.auth().currentUser) {
const currentUser = firebase.auth().currentUser;
console.log("Signed in username" + currentUser.displayName);
this.props.navigation.navigate('AppTab');
}else{
console.log("no user signed in");
this.props.navigation.navigate('AuthTab');
}
s'il y a quelque chose que je ne fais pas bien
Vous n'avez pas besoin de définir la persistance. Firebase le gère pour vous par défaut. Il vous suffit d'appeler cette fonction pour vérifier si l'utilisateur est connecté ou non:
firebase.auth().onAuthStateChanged((user) => {
if (user) {
console.log('user is logged');
}
}
Cela ne se déclenchera pas uniquement si l'utilisateur s'est déconnecté ou a nettoyé les données de l'application.
Vous pouvez trouver plus de détails dans les documents officiels: https://firebase.google.com/docs/auth/web/manage-users
J'espère que ça aide.
Assurez-vous de ne pas restreindre l'API du service de jeton dans console , avec la clé d'API que vous utilisez. Je n'ai pas ajouté le service à ma clé et il m'a déconnecté toutes les 3-4 heures, même avec le bon code suggéré ci-dessus.
Firebase
recommande désormais d'utiliser firestore
au lieu de realtime-database
et il gère la persistance hors ligne par défaut. C'est clair dans sa documentation ici
Vous avez juste besoin d'accéder à l'utilisateur via ce code:
if (auth().currentUser !== null) {
console.log('User is logged in');
console.log(auth().currentUser.email);
props.navigation.navigate('Home');
} else {
props.navigation.navigate('Login');
}
Ce code vous dirigera vers l'écran d'accueil si l'utilisateur est connecté, même lorsque vous fermez l'application. Pour effacer les informations d'identification de l'utilisateur, vous devez manuellement déconnecter l'utilisateur à l'aide de ce code.
try {
auth()
.signOut()
.then(props.navigation.navigate('Login'));
} catch (error) {
Alert.alert('Error', error.toString());
}
Vous pouvez également vérifier cette application simple (utilisée react hooks
)) pour obtenir de l'aide.