我想在注册用户时扫描数据库,以检查某个“用户名”是否可用或已被占用。我用这段代码试过了:
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"
}
}
虽然它解决了问题,但这个解决方案在测试阶段可能会很方便,但是在发布应用程序时呢?请告诉我。
最佳答案
对于这种情况,您可以简单地扩展当前规则,让每个人都可以读取您的用户名,如下所示:
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"unique-usernames": {
".read": true
}
}
}
另请查看 the security docs了解更多信息,因为您可以使用安全规则做更多事情。
关于android - 如何在用户注册之前扫描 Firebase 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39849524/