今天我试着构建了2个屏幕“用GG登录”和“注销重定向到登录屏幕”。成功!但是当我再次登录时,先前的gg帐户立即登录,而不需要登录弹出。在我的设备上记住已登录的帐户。如何完全退出,并与其他帐户再次登录。这里我的代码:我有‘主页与登录与谷歌’和‘主页中心与签署按钮’。此外,我有api.dart登录和注销,主页面使用路由到2页。-主页:
routes: {
"home-page": (context) => MyHomePage(),
"game-center": (context) => GameCenterPage(),
},
home: MyHomePage(),class FBApi {
static FirebaseAuth _auth = FirebaseAuth.instance;
static GoogleSignIn _googleSignIn = GoogleSignIn();
FirebaseUser firebaseUser;
FBApi(FirebaseUser user) {
this.firebaseUser = user;
}
static Future<FBApi> signInWithGoogle() 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(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(user.uid == currentUser.uid);
return FBApi(user);
}
static Future<void> signOut() async {
await _auth.signOut().then((_) {
print("***** log out...what the hell?");
// Navigator.of(context).pushNamedAndRemoveUntil("/login",
ModalRoute.withName("/home"));
});
}
}onPressed: () async {
_signOut();
Navigator.of(context).pushNamedAndRemoveUntil("home-page", ModalRoute.withName("game-center"));
},class MyHomePage extends StatelessWidget {
Future<bool> _loginUser() async {
final api = await FBApi.signInWithGoogle();
if (api != null) {
return true;
} else {
return false;
}
}
...发布于 2019-01-03 02:55:52
这个周末,我经历了一个类似的问题,并通过退出GoogleSignIn来解决这个问题--不过,我不确定这是否是正确的方法,因为我希望FirbaseAuth会自动退出所有提供商。
static Future<void> signOut() async {
await _auth.signOut().then((_) {
//try the following
_googleSignIn.signOut();
//try the following
Navigator.of(context).pushNamedAndRemoveUntil("/login", ModalRoute.withName("/home"));
});发布于 2019-08-25 02:31:30
如果您对Google SignIn的登录弹出有问题,请在登录呼叫后执行此操作。
Navigator.pushReplacement(
(context), MaterialPageRoute(builder: (context) => widget));发布于 2020-03-29 07:33:23
用户是从Firebase签出的,而不是从Google获得的。
因此,下一次您已经有一个用户注册了,这将由GoogleSignIn()返回。
你也需要从Google上签出去。以下内容非常适合我:
Future signOut() async {
try {
await _fireBaseAuthInstance.signOut();
await _googleSignInInstance.signOut();
} catch (e) {
print('Failed to signOut' + e.toString());
}
}https://stackoverflow.com/questions/54015619
复制相似问题