Я разрабатываю один небольшой демонстрационный проект, который использует 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"
}
}
работает нормально. но тогда это небезопасно.