アプリから現在のユーザーをサインアウトできない
私が使用している方法は次のとおりです:
....
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にリダイレクトされず、ユーザーをサインアウトしません。
FirebaseAuthのインスタンスが必要です
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
その後
_signOut() async {
await _firebaseAuth.signOut();
}