【发布时间】:2023-03-04 23:36:01
【问题描述】:
我花了一个下午的时间研究,然后检查了相关答案,但没有一个解决我的问题,请原谅我没有找到它,如果它是重复的。
我的 android 应用有一个实时数据库。但是,我想在 REST 客户端(邮递员)中获取格式化的 json,只是为了舒适(所以我可以在本地保存 json 以用于模拟目的)。
规则如下:
{
"rules": {
"contents": {
".read": true,
".write": false
}
}
}
理论上(如果我没记错的话),我应该能够通过以下方式检索数据:
https://project-f7de2.firebaseio.com/contents.json
但我收到此错误:
Status Code: 401 Unauthorized
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 36
Content-Type: application/json; charset=utf-8
Date: Sun, 12 Nov 2017 18:03:00 GMT
Server: nginx
Strict-Transport-Security: max-age=31556926; includeSubDomains; preload
我还按照这个链接解释了请求中的身份验证:
https://firebase.google.com/docs/reference/rest/database/
https://firebase.google.com/docs/database/rest/auth
所以我尝试调试我的应用程序,获取登录用户的 tokenID 并立即在我的 REST 客户端中发送请求:
mUser.getIdToken(true).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
@Override
public void onComplete(@NonNull Task<GetTokenResult> task) {
String token_id = task.getResult().getToken();
Log.d("I'm using this", token_id);
}
});
然后:
https://project-f7de2.firebaseio.com/contents.json?auth=<token_id>
但是,401 错误,权限被拒绝。
我对 firebase 和 REST 客户端还很陌生。
提前致谢。
【问题讨论】:
-
在您使用的 URL 中,
<database_name>是 Firebase 控制台项目设置选项卡中显示的项目 ID 吗?myproject-c4adb或project-1234567之类的东西? -
它是:project-f7de2 我认为那部分是正确的,否则错误不会是“未经授权”。另外,我尝试将路径 /contents 更改为另一个不存在且反馈正确的路径。我正在更新问题以澄清项目名称。
-
您的安全规则允许未经授权读取
contents。尝试一个简单的https://project-f7de2.firebaseio.com/contents.jsonGET,不带任何身份验证参数。这应该被接受。 -
我做到了,我写了“理论上(如果我没记错的话),我应该能够使用:project-f7de2.firebaseio.com/contents.json 检索数据”。我同意你的观点,这应该可行,但它不是,所以我在这里发布了这个问题,以防我的错误在其他地方并且我有隧道视野:(
-
为了消除在某处出现拼写错误的可能性,暂时更改您的rules to make your DB totally public,然后再次尝试 GET。
标签: android rest firebase firebase-realtime-database