如何使用Firebase身份验证在Flutter中注销用户

azi*_*iza 13 dart firebase firebase-authentication flutter

我从我的应用程序退出当前用户时遇到问题

我使用的方法如下:

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


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

  );
}
Run Code Online (Sandbox Code Playgroud)

所以现在当我按下按钮时,它应该签出用户并将它们重定向到主页,他们将不得不再次登录,然而,重定向发生但用户数据仍然会保存,所以当我再次按下按钮时它会自动使用最后一个帐户重新登录.如何删除用户数据,以便应用程序在每次注销后尝试登录时询问他们的凭据?

我觉得我错过了页面之间的联系以及他们的行为如何相应地改变的东西,但它是什么?

更新:我使用gobase登录功能和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';
}
Run Code Online (Sandbox Code Playgroud)

我的登录页面如下所示:

    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")
                  ],
                )
            )
        )
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

更新:将_signOut()方法更改为异步,如下所示:

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

    return new LoginPage();
}
Run Code Online (Sandbox Code Playgroud)

现在,当我按下注销时,它不会将我重定向到LoginPagae,也不会签署用户.

Col*_*son 19

Firebase auth的signOut方法是异步的.您应该进行_signOut方法async和调用,await FirebaseAuth.instance.signOut();以便runApp在用户注销后进行调用.

_googleSignIn.signOut()如果要向signIn用户显示身份验证对话框而不是静默并自动重新使用当前Google用户,则还应在注销时调用.

  • 非常感谢,这是有效的.我想到了我可能需要从谷歌退出的同样的事情.据我所知,Firebase应该处理所有这些,否则如果我必须分别从每个网络(google,facebook ..)登录和退出,包括Firebase身份验证有什么意义,你能为我澄清一下吗? (4认同)
  • 我还没有看到您对 Google 用户调用“signOut”,只有 Firebase 用户调用“signOut”。我更新了我的答案以建议这一点。 (2认同)
  • 我确实有这个问题.. 如果我的应用支持,比如说 Google 和 Facebook,我应该单独登录/退出吗? (2认同)
  • 我在注销时尝试了 _googleSignIn.signOut() 但仍然没有向用户显示身份验证对话框。知道可能是什么原因吗? (2认同)

Sed*_*ush 5

您需要有一个 FirebaseAuth 实例

  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
Run Code Online (Sandbox Code Playgroud)

进而

  _signOut() async {
    await _firebaseAuth.signOut();
   }
Run Code Online (Sandbox Code Playgroud)


SSo*_*eim 5

我看过的大多数演示都只是使用如下命令注销 Firebase_auth.signOut();

这似乎不再存在(参见上面科林的回复):

_googleSignIn.signOut()
Run Code Online (Sandbox Code Playgroud)

所以,我不得不使用这一种方法来注销/注销 Google。

_googleSignIn.disconnect();
Run Code Online (Sandbox Code Playgroud)