我一直在看以下帖子 Firebase android : make username unique
我的答案或多或少与答案相同。但我错过了一些东西。也许有人在这里有比我更好的眼睛,可以指出为什么它不起作用
我的代码
FirebaseUser user = firebaseAuth.getCurrentUser();
Map<String, Object> childUpdates = new HashMap<>();
Map<String, Object> userValues = new HashMap<>();
Map<String, Object> usernameValues = new HashMap<>();
userValues.put("email", email);
userValues.put("username", username);
usernameValues.put(username, user.getUid());
childUpdates.put("/Users/" + user.getUid() + "/", userValues);
childUpdates.put("/Usernames/", usernameValues);
mDatabaseReference.updateChildren(childUpdates).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
hideProgressDialog();
if(!task.isSuccessful()) {
//Username taken. Force user in next view to pick one
}
Intent intent = new Intent(RegisterActivity.this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
规则中的摘录
"Users": {
"$uid": {
".write": "auth != null && auth.uid === $uid",
".read": "auth !== null && auth.provider === 'password'",
"Username": {
".validate": "
!root.child('Usernames').child(newData.val()).exists() ||
root.child('Usernames').child(newData.val()).val() == auth.uid"
}
}
}
在我看来,我也应该为Usernames
添加规则。但我对上面的链接和给出的答案感到很困惑。那么我应该在逻辑上添加到用户名规则集
我猜我需要做类似
的事情"Usernames" : {
"$uid": {
".read": "auth != null",
".write": "auth != null",
".validate" : "!root.child('Usernames').child($uid).exists()"
}
}
感谢任何帮助。如果您希望我进一步解释,请告诉我