Android Firebase setValue()权限被拒绝

thu*_*t0n 5 java android firebase firebase-security firebasesimplelogin

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

{
"rules": {
 "users": {
  ".read": true,
    "$user_id": {
     ".write": "auth.uid === $user_id",
     ".read" : true
  }}}}
Run Code Online (Sandbox Code Playgroud)

我已经使用setValue()在我的注册活动中成功编写了新的用户信息,如下所示,并且每次我都没有使用put().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");
    }
Run Code Online (Sandbox Code Playgroud)

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

Atu*_*lic 28

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

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

  1. 合法
  2. 非授权

默认情况下,它设置为未授权,但是它们没有任何读取写入权限,因此,如果您尝试执行任何操作,则最初会收到权限被拒绝错误.

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

解:

在Database部分下,转到Rules选项卡.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
  }
}
Run Code Online (Sandbox Code Playgroud)

只需将其更改为

{
  "rules": {
    ".read": "auth == null", //even non-authorised users CAN read
    ".write": "auth == null" //even non-authorised users CAN write
  }
}
Run Code Online (Sandbox Code Playgroud)

根据您的要求更改此项.快乐编码:)