我在从我的应用中注销当前用户时遇到问题
我使用的方法如下:
.... 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,也不会注销用户。
Firebase身份验证的signOut方法是异步的。您应该进行_signOut方法async调用,await FirebaseAuth.instance.signOut();以便runApp在用户注销后进行调用。
signOut
_signOut
async
await FirebaseAuth.instance.signOut();
runApp
_googleSignIn.signOut()如果要向signIn用户显示身份验证对话框,而不是静默地自动重用当前的Google用户,则您也应该在注销时致电。
_googleSignIn.signOut()
signIn