【问题标题】:Firebase database REST API, get throws 401 errorFirebase 数据库 REST API,抛出 401 错误
【发布时间】: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 中,&lt;database_name&gt; 是 Firebase 控制台项目设置选项卡中显示的项目 ID 吗? myproject-c4adbproject-1234567 之类的东西?
  • 它是:project-f7de2 我认为那部分是正确的,否则错误不会是“未经授权”。另外,我尝试将路径 /contents 更改为另一个不存在且反馈正确的路径。我正在更新问题以澄清项目名称。
  • 您的安全规则允许未经授权读取contents。尝试一个简单的https://project-f7de2.firebaseio.com/contents.json GET,不带任何身份验证参数。这应该被接受。
  • 我做到了,我写了“理论上(如果我没记错的话),我应该能够使用:project-f7de2.firebaseio.com/contents.json 检索数据”。我同意你的观点,这应该可行,但它不是,所以我在这里发布了这个问题,以防我的错误在其他地方并且我有隧道视野:(
  • 为了消除在某处出现拼写错误的可能性,暂时更改您的rules to make your DB totally public,然后再次尝试 GET。

标签: android rest firebase firebase-realtime-database


【解决方案1】:

您拒绝对数据库的任何访问,如果您希望任何人写入“内容”子项,您必须将".write" 参数更改为true 或其他规则。 false 仅授予管理员访问权限。

{
  "rules": {
    "contents": {
      ".read": true,
      ".write": false
    }
  }
}

【讨论】:

  • 那么,您能建议除“true”之外的其他规则吗?
猜你喜欢
  • 1970-01-01
  • 2021-04-08
  • 2020-01-10
  • 2019-05-21
  • 2021-06-21
  • 1970-01-01
  • 2015-02-02
  • 2015-11-07
  • 1970-01-01
相关资源
最近更新 更多