首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“颤振身份验证”登录&从登录屏幕到登录屏幕与Google签署

“颤振身份验证”登录&从登录屏幕到登录屏幕与Google签署
EN

Stack Overflow用户
提问于 2019-01-03 02:36:23
回答 3查看 6.2K关注 0票数 5

今天我试着构建了2个屏幕“用GG登录”和“注销重定向到登录屏幕”。成功!但是当我再次登录时,先前的gg帐户立即登录,而不需要登录弹出。在我的设备上记住已登录的帐户。如何完全退出,并与其他帐户再次登录。这里我的代码:我有‘主页与登录与谷歌’和‘主页中心与签署按钮’。此外,我有api.dart登录和注销,主页面使用路由到2页。-主页:

代码语言:javascript
复制
routes: {
    "home-page": (context) => MyHomePage(),
    "game-center": (context) => GameCenterPage(),
  },
  home: MyHomePage(),
  • Api.dart:
代码语言:javascript
复制
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"));
    });
  }
}
  • gameCenter.dart:
代码语言:javascript
复制
onPressed: () async {
          _signOut();
          Navigator.of(context).pushNamedAndRemoveUntil("home-page", ModalRoute.withName("game-center"));
        },
  • home.dart
代码语言:javascript
复制
class MyHomePage extends StatelessWidget {
  Future<bool> _loginUser() async {
    final api = await FBApi.signInWithGoogle();
    if (api != null) {
      return true;
    } else {
      return false;
    }
  }
  ...
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-03 02:55:52

这个周末,我经历了一个类似的问题,并通过退出GoogleSignIn来解决这个问题--不过,我不确定这是否是正确的方法,因为我希望FirbaseAuth会自动退出所有提供商。

代码语言:javascript
复制
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"));
});
票数 7
EN

Stack Overflow用户

发布于 2019-08-25 02:31:30

如果您对Google SignIn的登录弹出有问题,请在登录呼叫后执行此操作。

代码语言:javascript
复制
 Navigator.pushReplacement(
        (context), MaterialPageRoute(builder: (context) => widget));
票数 0
EN

Stack Overflow用户

发布于 2020-03-29 07:33:23

用户是从Firebase签出的,而不是从Google获得的。

因此,下一次您已经有一个用户注册了,这将由GoogleSignIn()返回。

你也需要从Google上签出去。以下内容非常适合我:

代码语言:javascript
复制
Future signOut() async {
    try {
      await _fireBaseAuthInstance.signOut();
      await _googleSignInInstance.signOut();
    } catch (e) {
      print('Failed to signOut' + e.toString());
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54015619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档