gpt4 book ai didi

java - Firebase 规则 - 只允许用户访问他们自己的数据

转载 作者:行者123 更新时间:2023-11-30 10:04:13 25 4
gpt4 key购买 nike

我正在为 android 制作一个 firebase notes 应用程序作为一个项目(我是一个初学者,从来没有做过这样的事情)。我目前的问题是,无论用户是谁,所做的每条笔记都可供每个用户查看。我想让每个用户只能读/写他们自己的笔记,但到目前为止我发现和尝试的所有规则都使得没有笔记被发送到数据库或不显示。我也尝试使用代码本身,但我所做的一切都使应用程序崩溃,但我愿意接受建议。
问题(以用户 2 身份登录):
enter image description here

有两个用户和两个笔记的数据库:

enter image description here

我已经尝试过其他类似帖子的解决方案,例如:

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

但到目前为止没有一个正常工作。

用户创建:

fAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {

if (task.isSuccessful()) {

fUserDatabase.child(fAuth.getCurrentUser().getUid()).child("basic").child("name")
.setValue(name).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {

if (task.isSuccessful()) {
progressDialog.dismiss();
Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class);
startActivity(mainIntent);
finish();
Toast.makeText(RegisterActivity.this, "User Created", Toast.LENGTH_SHORT);

} else {
progressDialog.dismiss();
Toast.makeText(RegisterActivity.this, "Error: " + task.getException().getMessage(), Toast.LENGTH_SHORT);
}
}
});

} else {

progressDialog.dismiss();
Toast.makeText(RegisterActivity.this, "Error: " + task.getException().getMessage(), Toast.LENGTH_SHORT);
}
}
});

创建笔记:


(不在同一页面)

editText = findViewById(R.id.etx);
etd = findViewById(R.id.etdx);
button = findViewById(R.id.btnx);


button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("posts").push();
Map<String, Object> map = new HashMap<>();
map.put("id", databaseReference.getKey());
map.put("title", editText.getText().toString());
map.put("desc", etd.getText().toString());


databaseReference.setValue(map);
Intent back = new Intent(NewNoteActivity.this, MainActivity.class);
startActivity(back);

}
});

我想让每个用户只能看到、编辑和删除他们自己做的笔记。

最佳答案

我找到了一个解决方案,可能对其他遇到此类问题的人有用。
我将笔记创建中的路径更改为:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("posts").push();

然后相应地更改了显示注释的代码部分。
原来是这样:

Query query = FirebaseDatabase.getInstance()
.getReference()
.child("posts");

现在是这样的:

Query query = FirebaseDatabase.getInstance()
.getReference()
.child("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("posts");

关于java - Firebase 规则 - 只允许用户访问他们自己的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56006891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com