web-dev-qa-db-ja.com

Firebase認証を使用してFlutterでユーザーをサインアウトする方法

アプリから現在のユーザーをサインアウトできない

私が使用している方法は次のとおりです:

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


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

  );
}

これで、ボタンを押すと、ユーザーはサインアウトされ、再度ログインする必要があるホームページにリダイレクトされますが、リダイレクトは行われますが、ユーザーデータはまだ保存されているため、ボタンをもう一度押すと、自動的に最後のアカウントで再度サインインします。ログアウト後にログインしようとするたびにアプリが資格情報を要求するように、ユーザーデータを削除するにはどうすればよいですか?

ページ間のリンケージに欠けているものがあるように感じ、それに応じてページの動作がどのように変化するかについてですが、それは何ですか?

更新:Firebase認証でGoogleサインイン機能を使用しています

   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にリダイレクトされず、ユーザーをサインアウトしません。

18
aziza

FirebaseAuthのインスタンスが必要です

  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

その後

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