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

时间:2018-09-09 17:16:33

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

我正在开发一个使用Firebase Auth和数据库的小型演示项目。 我为Firebase数据库配置了以下规则

 <header>
        <h1 id="gtu-header-home">GTU Students Care</h1>
        <p id="gtu-header-detail">Tutorials | Question papers | Solution</p>
    </header>
        <ul class="navbar">
            <li><a href="#">Semester</a>
                <div id="innerlist-1" class="innerlist">
                    <a href="#">First</a>
                    <a href="#">Second</a>
                    <a href="#">Third</a>
                </div>
            </li>
            <li><a href="#">Branch</a>
                <div id="innerlist-2" class="innerlist">
                    <a href="#">Computer</a>
                    <a href="#">Electronics</a>
                    <a href="#">Civil</a>
                </div>
            </li>
        </ul>
    <footer>
        <div>
            <p id="footer-copyright">Copyright@ GTU Students Care</p>
        </div>
    </footer>

通过此规则,我希望经过身份验证的用户只能对其数据进行读写访问。

下面是试图保存数据的Java代码。

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

我得到的错误:W / RepoOperation:/ xgjCUqcasda444WkgZFHTNRUB3 / basic / -Lywe44rft566hhyYYfDS上的setValue失败:DatabaseError:权限被拒绝 W / DynamiteModule:找不到com.google.firebase.auth的本地模块描述符类。

我的数据库如下:

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();
                        }
                    }
                });
            }

我要去哪里了。我没有什么头绪。当我将规则更改为

demoProject-dd4568
    xgjCUqcasda444WkgZFHTNRUB3
        -basic
            -LE3gdfdffdfaza
                id:"-LE3gdfdffdfaza"
                user: "asdasd"

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

1 个答案:

答案 0 :(得分:0)

您的规则根本与您的数据库结构不匹配。您的规则是保护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");