[英]The User UID is not the same with document id in Firestore Android
我創建了一個 function 來向 Firestore 數據庫添加一個新用戶:
public void addNewUser(String email, String username, String profile_photo){
FirebaseFirestore db = FirebaseFirestore.getInstance(); // this is instantiated here, just to show you
User user = new User(userID, (long) 1, email, StringManipulation.condenseUsername(username), username, profile_photo);
db.collection("Users").add(user)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error adding document", e);
}
});
}
和一個 function 從數據庫中獲取數據,等待所有字段出現在應用程序中。
public UserSettings RetrieveUserSettings(){
Log.d(TAG, "getUserAccountSettings: retrieving user account settings from firebase");
User settings = new User();
DocumentReference userRef;
FirebaseAuth firebaseAuth=FirebaseAuth.getInstance();
try {
userRef = db.collection("Users")
.document(firebaseAuth.getCurrentUser().getUid());
userRef.get()
.addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
if(documentSnapshot.exists())
{
settings.setDisplay_name(documentSnapshot.getString("display_name"));
settings.setUsername(documentSnapshot.getString("username"));
settings.setProfile_photo(documentSnapshot.getString("profile_photo"));
settings.setEmail(documentSnapshot.getString("email"));
settings.setPhone_number(documentSnapshot.getLong("phone_number"));
settings.setUser_id(documentSnapshot.getString("user_id"));
}
else{
Log.d(TAG, "doc not fount in getUserSettinghs ");
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d(TAG, "onFailure: failed to fetch data");
}
});
} catch (NullPointerException e) {
Log.d(TAG, "getUserAccountSettings: NULLPointerException: " + e.getMessage());
}
Log.e(TAG, "getUserAccountSettings: retrieved user_account_settings information: " + settings.toString());
return new UserSettings(settings);
}
當我進行身份驗證時,這是生成的用戶 UID:E5bBL0D9lCSKy5a0YdUJjuMVuUT2,但是當我調用 addNewUser function 時,我的 Firestore 數據庫如下所示: ,所以很明顯在認證時生成的User UID與文檔ID不一樣,即:XWwnRBklieJXSxokQuNe。你知道為什么會這樣嗎?
正如@HenryTwist 在他的評論中提到的,在使用以下代碼行時:
db.collection("Users").add(user).addOnSuccessListener(/* ... /*);
您正在使用隨機 ID 將新的“用戶”object 添加到“用戶”集合中。 上面的代碼行與以下代碼相同:
db.collection("Users").document().set(user).addOnSuccessListener(/* ... /*);
當您在不傳遞任何參數的情況下調用 CollectionReference 的add()方法或 CollectionReference 的document()方法時,Firestore 使用的內置生成器將始終在每次調用其中一個方法時生成一個隨機ID。
正如我從以下代碼行中看到的:
userRef = db.collection("Users").document(firebaseAuth.getCurrentUser().getUid());
您已經實現了 Firebase Authentication ,這很好。 話雖如此,當您想將新的“用戶”object 添加到數據庫時,請使用來自身份驗證過程的 UID,如下所示:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
db.collection("Users").document(uid).set(user).addOnSuccessListener(/* ... /*);
這樣,文檔的 ID 將匹配數據庫中“user_id”屬性的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.