web-dev-qa-db-fra.com

React Native - La persistance d'authentification Firebase ne fonctionne pas

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

12
Nouman Tahir

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.

19
soutot

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.

1
Wolfmeister

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.

0
Aoun