我是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;
}
}
}
docs告诉我,Doc()
返回*DocumentRef
,这是对该文件的引用。要获取文档本身,你应该在它上面调用Get()
,它会给你一个*DocumentSnapshot
,最后调用Data()
。
ref := client.Doc("profile/test3")
snap, err := ref.Get(ctx)
// FIXME error checking
data := snap.Data()
我遇到了同样的问题,令人伤心的是documentation只提供了最困难的方法,因为初学者一开始很容易做到尽可能简单,但无论如何这些都是最简单的步骤:
如果您已登录控制台,请跳至步骤5
gcloud auth login
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了解更多信息