L'utilisateur connecté Flutter Firebase renvoie un utilisateur actuel NULL après la connexion
Lors de l'authentification dans Firebase à l'aide de l'API signInWithEmailAndPassword (), je ne parviens pas à obtenir un utilisateur "actuel" valide.
- Je me connecte à l'application avec un nom d'utilisateur et un mot de passe
auth.signInWithEmailAndPassword()
Une fois connecté, l'utilisateur est redirigé vers une page d'accueil
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
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 .
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.
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;
});
}
}