android - 在firebase数据库中写入数据时权限被拒绝
问题描述
我正在开发一个使用 Firebase Auth 和数据库的小型演示项目。我为我的 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 at /xgjCUqcasda444WkgZFHTNRUB3/basic/-Lywe44rft566hhyYYfDS failed: DatabaseError: Permission denied W/DynamiteModule: com.google.firebase.auth 的本地模块描述符类未找到。
我的数据库看起来像:
demoProject-dd4568
xgjCUqcasda444WkgZFHTNRUB3
-basic
-LE3gdfdffdfaza
id:"-LE3gdfdffdfaza"
user: "asdasd"
我要去哪里错了。我没有太多线索。当我将规则更改为
{
"rules": {
".read":"auth != null",
".write":"auth != null"
}
}
它工作正常。但那时它并不安全。
解决方案
您的规则与您的数据库结构完全不匹配。您的规则正在保护 下的子节点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");
推荐阅读
- r - R:表描述性统计:3 个变量
- laravel - Laravel - 如何通过关系对字段执行 where 查询?
- javascript - 使用 Chart.js 从世界银行 javascript JSON 下载中获取变更统计信息
- python - 一个更聪明的函数来确定 C 是否是 S 的精确覆盖?
- python - 如何在理想的浏览器上打开 jupyter notebook
- javascript - 我将如何使用 Socket-IO 上传图像文件?
- css - Live Sass 编译器不是**自动**更新
- c# - 在横向扩展的情况下,我们如何让重复作业仅在一个实例上触发
- c - 在 getline(3) / getdelim(3) 中使用静态分配的缓冲区
- python - 如何在while循环中找到最大数字