Firebase允许用户仅访问自己的数据

时间:2020-06-28 00:43:26

标签: java android firebase-realtime-database firebase-authentication firebase-security

我正在用android开发firebase Todo应用程序(我是初学者)。我的问题是,无论用户执行了什么任务,每个任务都可以让每个用户看到。我想让每个用户只能读/写他们自己的笔记,但是到目前为止,我找到并尝试过的所有规则都使其根本没有笔记发送到数据库或不显示。 具有两个用户和两个注释的数据库:

enter image description here

用户创建

fAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Toast.makeText(RegisterActivity.this, "User Created", Toast.LENGTH_SHORT).show();
                        startActivity(new Intent(getApplicationContext(),LoginActivity.class));
                    } else {
                        Toast.makeText(RegisterActivity.this, "Error" + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }

创建便笺:

(不在同一页面上)

 btnSaveTask.setOnClickListener(new View.OnClickListener() {
          @Override
            public void onClick (View v){
            reference = FirebaseDatabase.getInstance().getReference().child("ToDoApp").child(uid);

            reference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
              //                        
                  
                dataSnapshot.child(udi).child("titletodo").setValue(titletodo.getText().toString());
                        
                dataSnapshot.getRef().child("titletodo").setValue(titletodo.getText().toString());
                        
                dataSnapshot.getRef().child("desctodo").setValue(desctodo.getText().toString());
                        
                      
                 dataSnapshot.getRef().child("datetodo").setValue(datetodo.getText().toString());
                        dataSnapshot.getRef().child("keytodo").setValue(keytodo);
                        Intent a = new Intent(AddTask.this, MainActivity.class);
                        startActivity(a);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Snackbar.make(findViewById(R.id.rl), "No Data.", Snackbar.LENGTH_LONG).show();
                }

            });
        }
    });

我已经尝试过类似规则的解决方案:

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

}

我没有数据。

我想这样做,以便每个用户只能看到,编辑和删除他们自己制作的笔记。

0 个答案:

没有答案