在Firebase for Flutter中进行此身份验证的逻辑是什么?

时间:2018-03-23 18:53:27

标签: firebase dart google-signin flutter

我关注Firebase for Flutter Codelab以及8th step_ensureLoggedIn()函数:

final _googleSignIn = new GoogleSignIn();
final _auth = FirebaseAuth.instance;

Future<Null> _ensureLoggedIn() async {
  GoogleSignInAccount user = _googleSignIn.currentUser;
  if (user == null)
    user = await _googleSignIn.signInSilently();
  if (user == null) {
    await _googleSignIn.signIn();
    analytics.logLogin();                                    
  }

  if (await auth.currentUser() == null) {
    GoogleSignInAuthentication credentials =
        await _googleSignIn.currentUser.authentication;
    await auth.signInWithGoogle(
      idToken: credentials.idToken,
      accessToken: credentials.accessToken,
    );
  }
}

作为Flutter和Firebase框架的新手,我真的很难理解它背后的逻辑:首先我们尝试使用GoogleSignIn包来记录用户,然后不管我们会怎样在user我们尝试使用FirebaseAuth再次授权用户,而GoogleSignIn也会使用cursor.execute("CREATE TABLE <table-name>(coursename varchar(255),time varchar(255));")

你能解释一下我们为什么这两个人都这样做吗? 我的目标是为打开我的应用的用户提供两个单独的屏幕 - 一个用于未授权/匿名(具有登录和注册选项),另一个用于将看到普通应用界面的授权用户。

1 个答案:

答案 0 :(得分:1)

Codelab中的登录示例似乎写得不好,因为用户可能会取消非静默signIn(),然后googleSignIn.currentUser在尝试访问googleSignIn.currentUser.authentication时将为空。我认为更好的方法是触发Google登录并在googleSignIn.onAuthStateChanged监听器中处理Firebase身份验证。

至于为什么在该示例中使用了两者:如果您想使用Google帐户在Firebase上对用户进行身份验证,则必须提供idTokenaccessToken,必须从有效的Google登录信息中获取。首先,您让他们登录自己的Google帐户(通过googleSignIn)并使用其中的令牌通过Firebase进行身份验证(通过auth)。

仅当您要使用Google帐户向Firebase进行身份验证时,才需要使用googleSignIn;您还可以使用Firebase Auth与用户名/密码组合(这要求首先在Firebase上创建帐户)或使用Facebook登录中的令牌或其他OAuth令牌。