Android 在firebase数据库中写入数据时权限被拒绝
我正在开发一个使用Firebase Auth和数据库的小演示项目。 我为我的firebase数据库配置了以下规则Android 在firebase数据库中写入数据时权限被拒绝,android,firebase,firebase-realtime-database,firebase-authentication,Android,Firebase,Firebase Realtime Database,Firebase Authentication,我正在开发一个使用Firebase Auth和数据库的小演示项目。 我为我的firebase数据库配置了以下规则 { "rules": { "users": { "$uid": { ".read": "$uid === auth.uid", ".write": "$uid === auth.uid" } } 通过此规则,我希望经过身份验证的用户仅对其数据具有读写访问权限 下面是试图保存数据的java代码 Databas
{
"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();
}
}
});
}
我错在哪里。我没有多少线索。当我将规则更改为
{
"rules": {
".read":"auth != null",
".write":"auth != null"
}
}
它很好用。但是它不安全。您的规则与您的数据库结构根本不匹配。您的规则正在保护
用户
下的子节点,但您的数据库中没有用户
节点
您可能应该更改写入的位置,以便在路径中包含用户
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference root = FirebaseDatabase.getInstance().getReference();
//providing uid
DatabaseReference ref = root.child("users").child(uid).child("basic");
是 啊你完全正确。现在我明白它是如何工作的了。谢谢
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference root = FirebaseDatabase.getInstance().getReference();
//providing uid
DatabaseReference ref = root.child("users").child(uid).child("basic");