当前位置: 首页 > 知识库问答 >
问题:

如何从Flutter退出Google Auth?

宋俊艾
2023-03-14

我能够使用Google和Facebook成功登录firebase用户:

firebase_auth。飞镖,扑翼_facebook_登录。dart,google_sign_in.dart

我可以使用此功能从不同的小部件注销Firebase用户:

  Future<void>_signOut() async {
    final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
    return _firebaseAuth.signOut();
  }

现在,这是两种登录方式(Google和Facebook)的全部功能,如何确定用户是否是Google auth用户,在这种情况下,我可以执行

    final GoogleSignIn _googleSignIn = new GoogleSignIn();
...
    _googleSignIn.signOut();

此外,如果我的签出函数在不同的小部件和文件中,我如何传递要引用的GoogleSignIn对象以签出?

共有1个答案

万俟棋
2023-03-14

GoogleSignIn和FacebookSignIn有一个bool Future类型的方法。

final facebookLogin = FacebookLogin();
final GoogleSignIn googleSignIn = new GoogleSignIn();
     googleSignIn.isSignedIn().then((s) {});
      facebookLogin.isLoggedIn.then((b) {});

使用此方法,您将得到正确或错误。您可以使用注销方法。对于第二个问题,解决方案是为GoogleSignIn和facebook创建一个全局对象。

import 'dart:async';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:flutter_facebook_login/flutter_facebook_login.dart';

final facebookLogin = FacebookLogin();
final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = new GoogleSignIn();

Future<FirebaseUser> signInWithGoogle() async {
  // Attempt to get the currently authenticated user
  GoogleSignInAccount currentUser = _googleSignIn.currentUser;
  if (currentUser == null) {
    // Attempt to sign in without user interaction
    currentUser = await _googleSignIn.signInSilently();
  }
  if (currentUser == null) {
    // Force the user to interactively sign in
    currentUser = await _googleSignIn.signIn();
  }

  final GoogleSignInAuthentication googleAuth =
      await currentUser.authentication;

  // Authenticate with firebase
  final FirebaseUser user = await firebaseAuth.signInWithGoogle(
    idToken: googleAuth.idToken,
    accessToken: googleAuth.accessToken,
  );

  assert(user != null);
  assert(!user.isAnonymous);

  return user;
}

Future<Null> signOutWithGoogle() async {
  // Sign out with firebase
  await firebaseAuth.signOut();
  // Sign out with google
  await googleSignIn.signOut();
}
 类似资料:
  • 问题内容: 我有一个非常简单的问题,但是我没有使用Mysql从SP退出任何简单的代码。谁能和我分享该怎么做? 问题答案:

  • 我被卡住了,无法逃脱。它说: 但当我键入时,它只会出现在对象体中。

  • 问题内容: 用代码退出Java应用程序的最佳方法是什么? 问题答案: 您可以用于此目的。 根据oracle的Java 8文档: 终止当前正在运行的Java虚拟机。参数用作状态码;按照惯例, 非零状态代码表示异常终止 。 此方法在类Runtime中调用exit方法。此方法永远不会正常返回。 该调用实际上等效于该调用:

  • 问题内容: 用于退出的命令是什么?(即终止Node.js进程) 问题答案: 调用全局对象的方法: 从文档: process.exit([code]) 以指定的结束进程。如果省略,则退出使用“成功”代码。 要以“失败”代码退出: 执行节点的外壳程序应将退出代码视为。

  • 问题内容: 有哪些方法可以过早退出子句? 有时候,我在编写代码时希望将一条语句放在子句中,只是要记住,这些语句只能用于循环。 让我们以以下代码为例: 我可以想到一种方法:假设退出情况发生在嵌套的if语句内,请将剩余的代码包装在一个大的else块中。例: 问题是更多的退出位置意味着更多的嵌套/缩进代码。 另外,我可以编写我的代码以使子句尽可能小,并且不需要任何退出。 有人知道退出子句的好/更好的方法

  • 如果您能帮助我完成Java类的任务,我将不胜感激。问题提示如下: 编写一个程序来读取非负整数列表并显示最大整数、最小整数和所有整数的平均值。用户通过输入一个不用于查找最大值、最小值和平均值的负哨兵值来指示输入的结束。平均值应该是双精度类型的值,以便用小数部分计算。 我在代码中遇到的问题是,运行时,循环不会完成,除非输入的第一个值为负值,在这种情况下它返回: 输入的最大数字是:0输入的最小数字是:0