【问题标题】:How to use a google service account with cloud_firestore for Flutter?如何将 Google 服务帐户与 cloud_firestore 一起用于 Flutter?
【发布时间】:2019-11-26 09:34:16
【问题描述】:

我正在创建一个需要在 google firestore 上存储和导出一些信息的应用程序。我有一个带有相应证书的谷歌服务帐户,并且使用 Node.js 制作的导出器按预期工作。另一方面,对于需要存储信息的应用程序,我使用了 Flutter 和最新的 cloud_firestore 插件,但我找不到任何关于如何将谷歌服务帐户证书与 Flutter 插件一起使用的文档。

cloud_firestore 插件似乎没有任何机制来处理身份验证,并且插件 firebase_auth 似乎不支持 google 服务帐户。

是否有人能够通过 Firestore 和 Flutter 使用 Google 服务帐户?

【问题讨论】:

  • 不确定我的理解是否正确,但你可以使用谷歌登录和颤振,这是你想要的吗?
  • 我想使用 google 帐户服务,但我意识到它属于 firebase-admin。请参阅:firebase.google.com/docs/admin/setup 我将不得不找到另一种方法来验证应用程序。看到这个答案:stackoverflow.com/a/54293693/6852181
  • 嘿@jpuerto 你找到任何方法来验证应用程序了吗?我正在寻找相同的内容,但找不到任何关于此的帖子或文档。

标签: flutter google-cloud-firestore firebase-authentication


【解决方案1】:

在您的 firebase 项目控制台中,您可以在设置 -> 服务帐户 (settings/serviceaccounts/adminsdk) 中添加 google 服务帐户。 您还需要在身份验证 -> 提供者中将 google 声明为提供者 此时你需要在你的flutter项目中导入firebase控制台设置部分提供的新版本的google-service.json文件。

【讨论】:

    【解决方案2】:

    如果评论正确,这是我的答案。

    这是我使用的 AuthService。

    这将处理谷歌登录。

    import 'package:cloud_firestore/cloud_firestore.dart';
    import 'package:firebase_auth/firebase_auth.dart';
    import 'package:google_sign_in/google_sign_in.dart';
    
    class AuthService {
      final GoogleSignIn _googleSignIn = GoogleSignIn();
      final FirebaseAuth _auth = FirebaseAuth.instance;
    
      Future<FirebaseUser> signIn(String email, String password) async {
        FirebaseUser u = await _auth.signInWithEmailAndPassword(
            email: email, password: password);
        updateUserData(u);
        return u;
      }
    
      Future<FirebaseUser> signInAnon() async {
        FirebaseUser user = await _auth.signInAnonymously();
        updateUserData(user);
        return user;
      }
    
      void signOut() {
        _auth.signOut();
      }
    
      Future<FirebaseUser> googleSignIn() async {
        try {
          GoogleSignInAccount googleSignInAccount = await _googleSignIn.signIn();
          GoogleSignInAuthentication googleAuth =
              await googleSignInAccount.authentication;
    
          final AuthCredential credential = GoogleAuthProvider.getCredential(
            accessToken: googleAuth.accessToken,
            idToken: googleAuth.idToken,
          );
    
          FirebaseUser user = await _auth.signInWithCredential(credential);
          updateUserData(user);
    
          return Future.value(user);
        } catch (error) {
          print(error);
          return Future.error(error);
        }
      }
    }
    

    在你的 pupspec 中你可以导入

      firebase_core: ^0.4.0
      firebase_auth: ^0.11.0
      cloud_firestore: ^0.11.0+1
      google_sign_in: ^4.0.1+3
    

    【讨论】:

      猜你喜欢
      • 2014-10-15
      • 2018-08-10
      • 2020-06-09
      • 2014-10-01
      • 1970-01-01
      • 2016-08-11
      • 2012-09-13
      • 2018-08-07
      • 1970-01-01
      相关资源
      最近更新 更多