Отказано в доступе при записи данных в базу данных Firebase - PullRequest
0 голосов
/ 09 сентября 2018

Я разрабатываю один небольшой демонстрационный проект, который использует Firebase Auth и Database. У меня настроено следующее правило для моей базы данных firebase

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

С помощью этого правила я хочу, чтобы аутентифицированный пользователь имел права на чтение и запись только для своих данных.

Ниже приведен код Java, который пытается сохранить данные.

DatabaseReference databaseReference= FirebaseDatabase.getInstance().getReference().child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("basic");
{
DemoModel demoModel=new DemoModel();
demoModel.setId(databaseReference.push().getKey());  
demoModel.setUser("demoUser");        databaseReference.child(demoModel.getId()).setValue(demoModel).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if(task.isSuccessful()){
                            Toast.makeText(DemoActivity.this, Constants.SUCCESSFUL, Toast.LENGTH_SHORT).show();
                        }else {
                            Toast.makeText(DemoActivity.this, Constants.FAILED, Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            }

Ошибка, которую я получаю: W / RepoOperation: setValue в / xgjCUqcasda444WkgZFHTNRUB3 / basic / -Lywe44rft566hhyYYfDS завершилась ошибкой: DatabaseError: Разрешение отклонено W / DynamiteModule: класс дескриптора локального модуля для com.google.firebase.auth не найден.

Моя база данных выглядит так:

demoProject-dd4568
    xgjCUqcasda444WkgZFHTNRUB3
        -basic
            -LE3gdfdffdfaza
                id:"-LE3gdfdffdfaza"
                user: "asdasd"

Где я иду не так. Я понятия не имею. когда я изменяю правило на

{
  "rules": {
        ".read":"auth != null",
        ".write":"auth != null"
}
}

работает нормально. но тогда это небезопасно.

1 Ответ

0 голосов
/ 09 сентября 2018

Ваши правила совсем не соответствуют структуре вашей базы данных. Ваши правила защищают дочерние узлы в users, но в вашей базе данных нет узла users.

Возможно, вам следует изменить местоположение записи, чтобы включить в путь users.

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference root = FirebaseDatabase.getInstance().getReference(); 
//providing uid
DatabaseReference ref = root.child("users").child(uid).child("basic");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...