Firebase数据库:唯一的用户名

时间:2016-08-26 21:57:16

标签: android firebase firebase-realtime-database

我一直在看以下帖子 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()"
   }
}

感谢任何帮助。如果您希望我进一步解释,请告诉我

0 个答案:

没有答案