首页 > 解决方案 > 将 Google Firebase Golang 库(例如 IAP 和 Firestore)用于非管理员客户端应用程序

问题描述

简要描述;简介

大家好,

我正在与 Golang 合作,开发一种可以在家中本地运行的软件,但也可以与一些云数据同步(每个用户登录单独保护)。为此,我决定使用 Google Cloud Service - Firebase(IAP、Hosting、Functions 和 Firestore)。让我告诉你,我喜欢开发和学习这些。

然而,问题来了:我对谷歌提供的用于他们服务的 Golang 工具(库)感到非常困惑。如果您的代码在受信任的机器上运行,他们似乎有定义明确的 Golang 库来使用他们的服务,因为您必须将凭据导出到它。

就我而言,我正在开发的软件将在客户端计算机上运行,​​因此我需要客户端登录到 IAP 等。有人可以帮我吗?

问题

  1. 没有可用的工具似乎是特定于 Golang 客户端(非管理员)
  2. Google 提供了许多存储库,以及指向似乎做类似事情的不同工具的链接,其中一个供管理员使用,哪个使用他们的 RPC 服务器,哪个可以用于我的客户端?
  3. 谷歌对相同事物的不同版本有非常相似的名称;
  4. 文档对我来说似乎不够清楚,如果他们有特定的库或没有适合我的情况。

我取得的成就

    package main

    import (
        "context"
        "fmt"

        "cloud.google.com/go/firestore"
        "golang.org/x/oauth2"
        "google.golang.org/api/option"
    )

    func main() {
        ctx := context.Background()
        token := oauth2.Token{
            AccessToken:  "TOKEN_ID-FROM-IAP",
            TokenType:    "Bearer",
            RefreshToken: "REFRESH_TOKEN-from-IAP",
        }

        oauthClient := &oauth2.Config{}
        tSource := oauthClient.TokenSource(ctx, &token)

        client, err := firestore.NewClient(ctx, "ProjectID", option.WithTokenSource(tSource))
        if err != nil {
            // TODO: Handle error.
        }
        defer client.Close()

        iter := client.Doc("docPath").Snapshots(ctx)

        defer iter.Stop()
        for {
            docsnap, err := iter.Next()
            if err != nil {
                // TODO: Handle error.
            }

            dataMap := docsnap.Data()
            fmt.Println(dataMap)
        }
    }

最后的问题

从私有 Firebase 项目的非管理员客户帐户的角度来看:

感谢您的想法和建议,在此先感谢您!

标签: firebasegooauth-2.0google-cloud-firestorefirebase-authentication

解决方案


推荐阅读