[英]Permission denied when writing data in firebase database
I'm developing one small demo project which uses Firebase Auth and Database. 我正在开发一个使用Firebase Auth和数据库的小型演示项目。 I have the following rule configured for my firebase database 我为Firebase数据库配置了以下规则
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
Through this rule, I want an authenticated user to have a read and write access for their data only. 通过此规则,我希望经过身份验证的用户仅对其数据具有读写访问权限。
Below is the java code which is trying to save data. 下面是试图保存数据的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();
}
}
});
}
Error I'm getting: W/RepoOperation: setValue at /xgjCUqcasda444WkgZFHTNRUB3/basic/-Lywe44rft566hhyYYfDS failed: DatabaseError: Permission denied W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found. 我得到的错误:W / RepoOperation:/ xgjCUqcasda444WkgZFHTNRUB3 / basic / -Lywe44rft566hhyYYfDS上的setValue失败:DatabaseError:权限被拒绝W / DynamiteModule:com.google.firebase.auth的本地模块描述符类。
My database looks like: 我的数据库如下所示:
demoProject-dd4568
xgjCUqcasda444WkgZFHTNRUB3
-basic
-LE3gdfdffdfaza
id:"-LE3gdfdffdfaza"
user: "asdasd"
Where I'm going wrong. 我要去哪里错了。 I don't have much clue. 我没有什么头绪。 when I change the rule to 当我将规则更改为
{
"rules": {
".read":"auth != null",
".write":"auth != null"
}
}
it works fine. 它工作正常。 but it's not secure then. 但这并不安全。
Your rules don't match your database structure at all. 您的规则根本与您的数据库结构不匹配。 Your rules are protecting child nodes under users
, but you don't have a users
node in your database. 您的规则是保护users
下的子节点,但是您的数据库中没有users
节点。
You should probably be changing the location of the write to include users
in the path. 您可能应该更改写入位置,以将users
包括在路径中。
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference root = FirebaseDatabase.getInstance().getReference();
//providing uid
DatabaseReference ref = root.child("users").child(uid).child("basic");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.