go - 如何在本地计算机中获取 Google Cloud api(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;
}
}
}
解决方案
我有同样的问题,很遗憾文档只提供了最困难的方法,作为初学者,一开始尽可能简单是很重要的,但无论如何这些是最简单的步骤:
如果您已经登录控制台,请跳至步骤 5
- 安装gcloud
- 在命令行上运行
gcloud auth login
- 使用拥有该项目的 google 帐户登录
在您的代码中,您的配置客户端应该是这样的:
ctx := context.Background() client, err := firestore.NewClient(ctx, projectID) if err != nil { log.Fatal(err) }
在命令行上运行
gcloud beta auth application-default login
就是这样!这就像魔术一样,尝试其他方式时我太头疼了。这也适用于云存储,我猜任何谷歌云 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
}
阅读文档以获取更多信息
推荐阅读
- python - 在 Selenium 中查找隐藏的超链接(Python 网络爬虫)
- php - 从 .json (php) 获取 JSON 数据
- php - 查找php中是否存在值到mysql内置数组中
- codemirror - CodeMirror - 显示提示的 Catch Pick 事件
- objective-c - Xcode 11 GM - 错误:访问构建数据库 - 磁盘 I/O 错误
- tcl - 期望脚本的 puts 打印在错误的位置
- php - 比较两个结果并显示结果 PHP
- telegram-bot - 电报机器人如何向活跃的聊天/用户广播消息
- javascript - 如何添加类型以在节点 v12 中使用 Intl.ListFormat
- windows - 将批处理转换为 VBS 脚本