我正在开发一个使用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"
它工作正常。但这不安全。
答案 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");