L'utilisateur connecté Flutter Firebase renvoie un utilisateur actuel NULL après la connexion

Dec 10 2020

Lors de l'authentification dans Firebase à l'aide de l'API signInWithEmailAndPassword (), je ne parviens pas à obtenir un utilisateur "actuel" valide.

  1. Je me connecte à l'application avec un nom d'utilisateur et un mot de passe
auth.signInWithEmailAndPassword()
  1. Une fois connecté, l'utilisateur est redirigé vers une page d'accueil

  2. J'essaie d'obtenir l'UID de l'utilisateur mais aucun utilisateur valide n'est renvoyé. L'appel se produit dans une fonction asynchrone en tant que telle:

currentUser = await auth.currentUser();

currentUser est nul.

Des idées sur ce qui pourrait en être la cause?

Réponses

1 Keita Dec 10 2020 at 00:08

Que faire si vous rechargez le FirebaseUser renvoyé? Cela a fonctionné pour moi.

const User currentUser = await auth.currentUser;
if (currentUser != null) {
  await currentUser.reload();
}

Code clairement simplifié. Remarque: auth.currentUser () est désormais auth.currentUser.

Il peut s'agir d'un doublon: Flutter Firebase Authentication currentUser () renvoie null .

1 DougStevenson Dec 10 2020 at 00:10

La documentation suggère d'utiliser un observateur d'état d'authentification pour obtenir un rappel lorsque l'utilisateur est connecté et qu'un objet User est disponible. Comme indiqué dans cette documentation liée:

FirebaseAuth.instance
  .authStateChanges()
  .listen((User user) {
    if (user == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

Je suggère fortement de ne pas compter sur currentUser, car cela ne peut être vérifié qu'à un moment donné. L'observateur est assuré de vous faire savoir quand l'objet utilisateur est disponible pour utilisation.

HarshSingh Dec 19 2020 at 03:10

après avoir obtenu l'utilisateur, rechargez-le une fois qu'il résoudra votre code de problème pour référence: D

final FirebaseAuth _auth = FirebaseAuth.instance;
  User currentuser;
  bool isloggedin= false;
  getUser() async{

    User user =  _auth.currentUser;
    await user?.reload();
    user =  _auth.currentUser;

    if(user !=null)
    {
      setState(() {
        this.currentuser = user;
        this.isloggedin=true;
      });
    }
  }