如何在本地计算机上获得Google Cloud API(Firestore)的权限

时间:2018-09-07 20:50:26

标签: go google-cloud-platform google-cloud-firestore

我是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;
    }
  }
}

3 个答案:

答案 0 :(得分:1)

我可以通过更改以下配置来完成这项工作。

转到项目概述->项目设置->服务帐户->“ Firebase Admin SDK”->“生成新私钥”->“生成”

enter image description here

然后您会看到如下所示的弹出窗口

enter image description here

我花了一个小时才弄清楚这一点。我希望这可以节省您所有的时间!

答案 1 :(得分:0)

docs告诉我Doc()返回文档的引用 *DocumentRef。要获取文档本身,您应该在文档上调用Get(),这样会给您*DocumentSnapshot,最后在文档上调用Data()

=SUBSTITUTE(B1, A1, "")

答案 2 :(得分:0)

我遇到了同样的问题,可悲的是documentation仅提供了最困难的方法,对于初学者来说,一开始要尽可能简单是很重要的,但是无论如何,这些都是最简单的步骤:

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

  1. 整体gcloud
  2. 在命令行gcloud auth login上运行
  3. 使用拥有该项目的Google帐户登录
  4. 在您的代码中,您的配置客户端应如下所示:

    ctx := context.Background()
    client, err := firestore.NewClient(ctx, projectID)
    if err != nil {
        log.Fatal(err)
    }
    
  5. 在命令行gcloud beta auth application-default login

  6. 上运行

就是这样!就像魔术,尝试其他方法时我太头疼。 这也适用于cloud storage和我猜到的任何Google Cloud API

关于您的代码:

client.Doc("profile/test3")

您根本没有得到任何文档,只是创建一个*DocumentRef,为了获得您应该执行的文档:

    ctx:=context.Background()
    snapShot,err:=client.Doc("profile/test3").Get(ctx)
    if err!=nil{
    log.Println(err)
    return err
    }
    var myStruct myStructType
    if err=snapShot.DataTo(&myStruct);err!=nil{
    log.Println(err)
    return err
    }

阅读documentation了解更多信息