簡體   English   中英

Firebase從電子郵件獲取uid

[英]Firebase get uid from email

我想從輸入電子郵件中獲得一個uid,以便可以通過電子郵件添加朋友。

到目前為止,這是我得到的:

final DatabaseReference mRef = FirebaseDatabase.getInstance().getReference().child("users");
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    if (user != null) {
        final String currentUserUid = user.getUid();

        mRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.hasChild(uid)) {
                DatabaseReference newRef = mRef.child(uid);
                newRef.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        if (!dataSnapshot.hasChild(uid)) {
                            DatabaseReference database = FirebaseDatabase.getInstance().getReference();
                            String username = String.valueOf(dataSnapshot.child("username").getValue());
                            String email = String.valueOf(dataSnapshot.child("email").getValue());
                            String firebaseToken = String.valueOf(dataSnapshot.child("firebaseToken").getValue());

                            Friend friend = new Friend(uid, username, email, firebaseToken);
                            database.child(Constants.ARG_USERS)
                                    .child(currentUserUid)
                                    .child(Constants.ARG_FRIENDS)
                                    .child(uid)
                                    .setValue(friend)
                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                            if (task.isSuccessful()) {
                                                mOnFriendDatabaseListener.onSuccess(context.getString(R.string.friend_successfully_added));
                                            } else {
                                                mOnFriendDatabaseListener.onFailure(context.getString(R.string.friend_unable_to_add));
                                            }
                                        }
                                    });
                        } else {
                            Log.d("Adding Friend", "User already not exist");
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
                } else {
                    Log.d("Adding Friend", "User does not exist");
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

如果我直接輸入一個uid,但我希望輸入的內容為電子郵件並從中獲取一個uid,則此方法有效,或者如果有其他解決方案,請提出建議。

數據庫結構如下所示: Firebase DB的圖像

我在這里先向您的幫助表示感謝。

要通過用戶的電子郵件地址搜索用戶,您需要對該屬性進行排序/過濾:

Query query = mRef.orderByChild("email").equalTo("example@example.com");
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // There may be multiple users with the email address, so we need to loop over the matches
        for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
            System.out.println(userSnapshot.getKey());
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
        Log.w(TAG, "find email address:onCancelled", databaseError.toException());
        // ...
    }
});

與問題沒有直接關系,但請重組您的數據以刪除朋友和個人資料的嵌套。 出於多種原因,最好保持Firebase數據結構平坦,並將用戶個人資料與好友列表分開。

/users
  uid1: ... profile for user 1
  uid2: ... profile for user 2
/friends
  uid1: ... friends list for user 1
  uid2: ... friends list for user 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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