Android Firebase setValue() 权限被拒绝

Android Firebase setValue() Permission Denied

这是在 firebase 上定义规则的方式:

{
"rules": {
 "users": {
  ".read": true,
    "$user_id": {
     ".write": "auth.uid === $user_id",
     ".read" : true
  }}}}

我已经像下面一样使用 setValue() 在我的寄存器 activity 中成功写入了新用户信息,并且还使用 push().setValue() 添加了新评论,每次我都没有身份验证问题。新用户直接写到 http://DB/users/ 而评论添加得很深。

这是一个代码片段,我的代码点击了日志:无法保存数据。每次。

AuthData authData = newRef.getAuth();

    if (authData != null) {
        Log.v(LOG_TAG, "Auth as " + authData.getUid());
        Map<String, Object> newEntry = new HashMap<String, Object>();
        newEntry.put("Name", name);
        newEntry.put("Description", desc);
        newEntry.put("DueDate", date);
        newEntry.put("Status", 0);

        newRef.setValue(newEntry, new Firebase.CompletionListener() {
            @Override
            public void onComplete(FirebaseError firebaseError, Firebase firebase) {
                if (firebaseError != null) {
                    Log.v(LOG_TAG, "Data could not be saved. " + firebaseError.getMessage()); //Hits here every time.
                } else {
                    Log.v(LOG_TAG, "Data saved successfully. Finishing activity...");
                    finish();
                }
            }
        });
        ;
    }
    else{
        Log.v(LOG_TAG, "No authdata");
    }

希望我提供了足够的信息,我猜问题出在 security/rules 中,但任何 direction/guidance 都将不胜感激。谢谢。

我的数据库参考路径有误。

http://DB-PATH/simplelogin:00/PERMISSION-DENIED

http://DB-PATH/users/simplelogin:00/Can-only-add-here

我太纠结于这一点了,这对我有帮助。

首先,有两种类型的用户可以从 firebase 访问数据库

  1. 授权
  2. 未经授权

默认情况下,它被设置为未授权,但他们没有任何权限,既没有 read 也没有 write,所以最初如果你尝试执行任何操作你得到 permission denied error.

如何更改它以满足您的要求?

解法:

在“数据库”部分下,转到“规则”选项卡。 URL 将与您的项目名称类似。
https://console.firebase.google.com/project/project-name/database/rules

你会在这里看到这样的东西:

{
  "rules": {
    ".read": "auth != null", //non-authorised users CANT read
    ".write": "auth != null" //non-authorised users CANT write
  }
}

只需将其更改为

{
  "rules": {
    ".read": "auth == null", //even non-authorised users CAN read
    ".write": "auth == null" //even non-authorised users CAN write
  }
}

根据您的要求更改此项。编码愉快:)

对于遇到这个问题的人,不要忘记更改默认给我们 firebase 的 "type of database",应该注意的是有 2 种类型的数据库,一种是 Cloud Firestore 和另一个 RealTime Database

要回答这个问题,请确保您使用的是实时数据库:

然后编辑规则:

显然这种规则配置应该只用于开发环境,不要忘记在生产环境中更改规则。