簡體   English   中英

用戶 UID 與 Firestore Android 中的文檔 ID 不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM