简体   繁体   English

在Firebase数据库中写入数据时,权限被拒绝

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM