如何发出未经身份验证的Firestore REST API POST请求

时间:2018-06-26 07:08:56

标签: google-cloud-firestore

Firestore REST API的文档随处可见,我想这是可以原谅的,因为它仍处于测试阶段。他们似乎建议REST API应该遵循与gRPC客户端相同的规则,因此,如果路径中包含以下规则:

match /thing/* { allow create; allow read: if request.auth.uid != null; }

(例如,我希望任何人都可以添加东西,然后只有经过身份验证的用户才能看到这些东西)

那我应该能够:

curl 'https://content-firestore.googleapis.com/v1beta1/projects/myproject/databases/(default)/documents/things?alt=json' -H 'Content-Type: application/json' -d '{"fields":{"test":{"stringValue": "foo"}}}'

,然后在我的事物集合中创建一个文档。但是我得到了:

{ "error": { "code": 403, "message": "Missing or insufficient permissions.", "status": "PERMISSION_DENIED" } }

有人有运气吗?还是我只是那个带有奇怪用例的家伙?一些文档提到了API令牌或其他Google Cloud身份验证方法。

接下来的问题,如果答案是我需要复杂的身份验证才能执行此操作,那么是否存在另一种众所周知的策略来在互联网上展示写入Firestore的REST API?

编辑:我还应该补充一点,当在浏览器中从Google APIs Explorer运行时,相同的POST命令可以很好地工作,但是当我这样做时,我就通过了身份验证。

1 个答案:

答案 0 :(得分:-1)

您的规则说:request.auth.uid!= null-因此在执行请求时应该对用户进行身份验证。 REST API的行为是正确的,因为您执行的请求是针对未经身份验证的用户的,您会得到403

如何验证用户身份取决于您的平台。但是,如果我们假设您在网上,那么在用户登录后,您可以运行firebase.auth()。currentUser.getToken(true).then(token => token)...方法,令牌,然后通过&access = YOUR_TOKEN将其添加到您的网址中。

现在,firebase将能够使用REST API对用户进行身份验证,并且您的请求应会按预期完成。