如何在本地计算机上获取Google Cloud apis(firestore)的权限

问题描述 投票:0回答:2

我是fireStore的新手,并试图检索文档值,但它没有像我期望的那样工作。当我尝试通过我的IDE和golang访问时,我得到了“许可被拒绝”。

码:

func TestConnectToCollection(t *testing.T) {

    ctx := context.Background()
    client, err := firestore.NewClient(ctx, "<my-Project-ID>")
    if err != nil {
        // TODO: Handle error.
    }
    defer client.Close()
    doc := client.Doc("profile/test3")
    fmt.Println(doc)
    fmt.Println(doc.ID)

    iter := client.Collection("profile").Documents(ctx)
    for {
        doc, error := iter.Next()
        if error == iterator.Done {
            break
        }
        if error != nil {
            fmt.Println(error.Error())
        } else {
            fmt.Println(doc.Data())
        }
    }
}

输出:

&{0xc0001725a0 projects/<project-id>/databases/(default)/documents/profile/test3 test3}
test3
rpc error: code = PermissionDenied desc = Missing or insufficient permissions.
rpc error: code = PermissionDenied desc = Missing or insufficient permissions.
rpc error: code = PermissionDenied desc = Missing or insufficient permissions.
rpc error: code = PermissionDenied desc = Missing or insufficient permissions.

Firestore规则 - 我打开了我的firestore规则,认为这是问题所在。

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}
go google-cloud-platform google-cloud-firestore
2个回答
0
投票

docs告诉我,Doc()返回*DocumentRef,这是对该文件的引用。要获取文档本身,你应该在它上面调用Get(),它会给你一个*DocumentSnapshot,最后调用Data()

ref := client.Doc("profile/test3")
snap, err := ref.Get(ctx)
// FIXME error checking
data := snap.Data()

0
投票

我遇到了同样的问题,令人伤心的是documentation只提供了最困难的方法,因为初学者一开始很容易做到尽可能简单,但无论如何这些都是最简单的步骤:

如果您已登录控制台,请跳至步骤5

  1. 安装poi qazxsw
  2. 在命令行gcloud上运行
  3. 使用拥有该项目的Google帐户登录
  4. 在您的代码中,您的配置客户端应如下所示: gcloud auth login
  5. 在命令行ctx := context.Background() client, err := firestore.NewClient(ctx, projectID) if err != nil { log.Fatal(err) } 上运行

就是这样!它就像魔术一样,我在其他方面尝试过多。这也适用于gcloud beta auth application-default login和任何google cloud api我猜

关于你的代码:

cloud storage

你根本没有得到任何文件,它只是创建一个qazxsw poi,以获得你应该做的文件:

client.Doc("profile/test3")

阅读*DocumentRef了解更多信息

© www.soinside.com 2019 - 2024. All rights reserved.