从我的应用注销当前用户时遇到问题
我使用的方法如下:
....
onPressed:_signOut
//jump to function
void _signOut() {
FirebaseAuth.instance.signOut();
FirebaseUser user = FirebaseAuth.instance.currentUser;
//print('$user');
runApp(
new MaterialApp(
home: new LoginPage(),
)
);
}
现在,当我按下按钮,它应该注销用户,并将他们重定向到主页,他们将不得不再次登录,然而,重定向发生,但用户数据仍然会保存,所以当我再次按下按钮,它会自动登录与最后一个帐户再次。我如何删除用户数据,使应用程序询问他们的凭据,每次他们尝试登录后注销?
我觉得我在页面之间的链接以及它们的行为如何相应地变化中遗漏了一些东西,但那是什么呢?
更新:我使用谷歌登录功能与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,也不会注销用户。
8条答案
按热度按时间ugmeyewa1#
Firebase auth的
signOut
方法是异步的。您应该使您的_signOut
方法为async
。以便对
runApp
的调用发生在用户退出之后。如果您希望
signIn
向用户显示身份验证对话框,而不是静默地自动重用当前Google用户,则还应该在注销时调用_googleSignIn.signOut()
。ifmq2ha22#
您需要有FirebaseAuth的示例
然后
t8e9dugd3#
我看过的大多数演示只使用
_auth.signOut();
之类的命令注销Firebase这似乎不再存在了(见柯林的答复以上):
所以,我不得不使用这一种方法来注销/注销谷歌。
polhcujo4#
首先创建一个FirebaseAuth示例,如下所示
然后将此添加到您的注销按钮或您希望用于注销的任何方式。
您还可以创建一个函数,然后在按钮内调用signOut,如下所示
"你决定吧“
33qvvth15#
如果上面的每个答案都不起作用,可能是一个页面放在其他所有东西之上,然后使用
Navigator.of(context).pop();
弹出页面。我找了几个小时找一个根本不存在的错误就为了这个小错误。
6yt4nkrj6#
应该使注销函数异步
55ooxyrt7#
声明一个Future方法来调用logout函数,并在注销完成时重定向页面:
643ylb088#
这对我很有效