我想在注册用户时扫描数据库,以检查用户是否有某个用户名'可以使用或采取。我尝试使用此代码:
mDatabase.child("usernames").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
if (dataSnapshot.getValue() == uniqueUserName.getText().toString()) {
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "Username already taken", Snackbar.LENGTH_SHORT);
snackbar.show();
} else {
signingUpMethod();
}
} else {
signingUpMethod();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
但得到了这个日志:
W/SyncTree: Listen at /unique-usernames failed: DatabaseError: Permission denied
在做了一些研究之后,我找到了这个答案:Firebase Permission denied Error
目前的安全规则:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
虽然它解决了这个问题,但这个解决方案可能在测试阶段很方便,但在发布应用程序时会怎样?请告诉我。
答案 0 :(得分:3)
对于这种情况,您可以简单地扩展当前规则,让每个人都可以读取您的用户名:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"unique-usernames": {
".read": true
}
}
}
另请查看the security docs以获取更多信息,因为您可以使用安全规则执行更多操作。
答案 1 :(得分:0)
在Firebase中,最好的方法是授权使用Firebase Authentication以及获取用户列表,以便在用户使用Firebase Realtime Database成功注册用户时维护数据库。您无法仅使用Firebase Realtime Database
维护授权用户列表