【问题标题】:Permission denied when writing data in firebase database在firebase数据库中写入数据时权限被拒绝
【发布时间】:2019-02-14 05:52:57
【问题描述】:

我正在开发一个使用 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"
}
}

它工作正常。但这并不安全。

【问题讨论】:

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


    【解决方案1】:

    您的规则与您的数据库结构完全不匹配。您的规则正在保护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");
    

    【讨论】:

    • 是的..你是绝对正确的。现在我明白它是如何工作的了。谢谢!
    猜你喜欢
    • 2018-08-02
    • 2019-02-25
    • 2019-11-15
    • 2020-11-25
    • 2018-12-12
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多