Android Firebase setValue()权限被拒绝

时间:2015-04-27 17:08:17

标签: java android firebase firebase-security firebasesimplelogin

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

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

我已经使用setValue()成功地在我的注册活动中编写了新的用户信息,就像下面一样,并且每次我都没有认证问题时,还使用push()。setValue()添加了新注释。新用户直接写入http://DB/users/,而评论被添加得非常深。

这是一个代码snippit,我的代码命中日志:数据无法保存。每次。

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");
    }

希望我提供了足够的信息,我猜这个问题在于安全/规则,但任何方向/指导都会非常感激。谢谢。

3 个答案:

答案 0 :(得分:26)

我太过坚持这一点了,这就是帮助我的原因。

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

  1. 授权
  2. 非授权的
  3. 默认情况下,它设置为未授权,但是他们既没有读取也没有写入的任何权限,所以最初如果您尝试执行任何操作权限被拒绝错误

    如何根据您的要求进行更改?

    <强>解决方案:

    在“数据库”部分下,转到“规则”选项卡。 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
      }
    }
    

    根据您的要求进行更改。快乐的编码:)

答案 1 :(得分:1)

答案 2 :(得分:0)

对于有此问题的人,请不要忘记更改默认情况下为我们提供Firebase的“数据库类型”,应注意的是,有两种类型的数据库是 Cloud Firestore >,另一个是实时数据库

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

Change the type of database

然后编辑规则:

Edit your security rules in the section of Database>Rules

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