我是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;
}
}
}
答案 0 :(得分:1)
我可以通过更改以下配置来完成这项工作。
转到项目概述->项目设置->服务帐户->“ Firebase Admin SDK”->“生成新私钥”->“生成”
然后您会看到如下所示的弹出窗口
我花了一个小时才弄清楚这一点。我希望这可以节省您所有的时间!
答案 1 :(得分:0)
docs告诉我Doc()
返回文档的引用 *DocumentRef
。要获取文档本身,您应该在文档上调用Get()
,这样会给您*DocumentSnapshot
,最后在文档上调用Data()
。
=SUBSTITUTE(B1, A1, "")
答案 2 :(得分:0)
我遇到了同样的问题,可悲的是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
就是这样!就像魔术,尝试其他方法时我太头疼。 这也适用于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了解更多信息