web-dev-qa-db-fra.com

Comment déconnecter un utilisateur dans Flutter avec l'authentification Firebase

J'ai un problème pour déconnecter l'utilisateur actuel de mon application

la méthode que j'utilise est la suivante:

....
onPressed:_signOut
//jump to function


  void _signOut() {
  FirebaseAuth.instance.signOut();
  FirebaseUser user = FirebaseAuth.instance.currentUser;
  //print('$user');
  runApp(
      new MaterialApp(
        home: new LoginPage(),
      )

  );
}

Alors maintenant, lorsque j'appuie sur le bouton, il doit déconnecter l'utilisateur et le rediriger vers la page d'accueil à laquelle il devra se reconnecter, cependant, la redirection se produit mais les données utilisateur seront toujours enregistrées, donc lorsque j'appuie à nouveau sur le bouton, il le fera automatiquement reconnectez-vous avec le dernier compte. Comment puis-je supprimer les données utilisateur pour que l'application pose des questions sur leurs informations d'identification chaque fois qu'elles essaient de se connecter après une déconnexion?

Je sens que je manque quelque chose dans le lien entre les pages et comment leur comportement change en conséquence, mais qu'est-ce que c'est?

Mise à jour: j'utilise la fonction de connexion Google avec l'authentification Firebase

   Future<String> _testSignInWithGoogle() async {
  final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
  final GoogleSignInAuthentication googleAuth =
  await googleUser.authentication;
  final FirebaseUser user = await _auth.signInWithGoogle(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );
  assert(user.email != null);
  assert(user.displayName != null);
  assert(!user.isAnonymous);
  assert(await user.getToken() != null);
return 'signInWithGoogle succeeded: $user';
}

Ma page de connexion ressemble à ceci:

    class LoginPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return new Scaffold(
        appBar: new AppBar(
          title: new Text("Login"), backgroundColor: Colors.blue,),
        body: new Container(
            child: new Center(
                child: new Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    new IconButton(
                      icon: new Icon(Icons.account_box, color: Colors.red),
                      onPressed:  _signIn,
                      iconSize: 80.0,),
                    new Text("Google Signin")
                  ],
                )
            )
        )
    );
  }
}

Mise à jour: la méthode _signOut () a été modifiée pour être asynchrone comme suit:

    Future <LoginPage> _signOut()  async{
    await FirebaseAuth.instance.signOut();

    return new LoginPage();
}

Maintenant, lorsque j'appuie sur la déconnexion, cela ne me redirige pas vers LoginPagae ni ne déconnecte l'utilisateur.

18
aziza

Vous devez avoir une instance de FirebaseAuth

  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

Puis

  _signOut() async {
    await _firebaseAuth.signOut();
   }
0
Seddiq Sorush