一尘不染

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

flutter

我在从我的应用中注销当前用户时遇到问题

我使用的方法如下:

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


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

  );
}

因此,现在当我按下按钮时,应该将用户注销,然后将他们重定向到必须再次登录的主页,但是,发生了重定向,但是用户数据仍会保存,因此当我再次按下按钮时,它将自动使用上一个帐户再次登录。如何删除用户数据,以便应用程序在注销后每次尝试登录时都会询问其凭据?

我觉得我在页面之间的链接中缺少某些内容,它们的行为也相应地发生了变化,但这是什么?

更新:我将Google登录功能与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';
}

我的登录页面如下所示:

    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")
                  ],
                )
            )
        )
    );
  }
}

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

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

    return new LoginPage();
}

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


阅读 202

收藏
2020-08-13

共1个答案

一尘不染

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

_googleSignIn.signOut()如果要向signIn用户显示身份验证对话框,而不是静默地自动重用当前的Google用户,则您也应该在注销时致电。

2020-08-13