web-dev-qa-db-ja.com

Firebase androidのユーザーメールでuserIDを取得する方法

メールアドレスが与えられた場合、人のユーザーIDを取得することは可能ですか?例えば、

その人の電子メールを持つ可変電子メールがある場合。次のような方法でIDを取得できますか

_String userID = mAuth.DatabaseReference.getuID.(email);
_

これは愚かな質問なら申し訳ありません。

編集:注、現在のユーザーではない人のIDを取得しようとしています。そのため、FirebaseUser user = mAuth.getCurrentUser();は使用できません

データベースの構造は次のようになっているので、IDはすでにデータベースに格納されています。取得する方法が必要なだけです(下の図では、電子メールのフィールドはありませんが、誰かが-_-と思っていた場合に備えて、追加します)。

また、可能であれば、彼らのメールに基づいて、またはIDを取得したらIDを使用して、彼らのプロフィール画像を取得したいと思います。

enter image description here

10
SumOne

信頼されたサーバーでメールでユーザーを検索する場合は、Firebase Admin SDKを使用できます。 ユーザーデータの取得に関するドキュメント から:

admin.auth().getUserByEmail(email)
  .then(function(userRecord) {
    // See the tables above for the contents of userRecord
    console.log("Successfully fetched user data:", userRecord.toJSON());
  })
  .catch(function(error) {
    console.log("Error fetching user data:", error);
  });

Firebase AuthenticationのクライアントSDKは、現在認証されているユーザーのプロファイルへのアクセスのみを提供します。メールアドレスでユーザーを検索する方法はありません。クライアント側のルックアップを可能にするための一般的な方法は、データベースにUIDごとのメールアドレスを格納することです。

"emailToUid": {
    "SumOne@domain,com": "uidOfSumOne",
    "puf@firebaseui,com": "uidOfPuf"
}

このシンプルなリストを使用すると、エンコードされた電子メールアドレスからUIDを検索できます。

ref.child("emailToUid").child("SumOne@domain,com").addSingleValueEventListener(...

以下も参照してください。

21

Firebaseは電子メールに基づいてユーザー情報を提供しません。資格情報を使用してログインを作成し、ログインに成功したら、以下のコードを使用してユーザーの詳細を取得できます。

FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
                            if(currentFirebaseUser !=null)

    {
        Log.d(TAG, "onComplete: currentUserUid---->" + currentFirebaseUser.getUid());
        Log.d(TAG, "onComplete: currentUserEmail---->" + currentFirebaseUser.getEmail());
        Log.d(TAG, "onComplete: currentUserDisplayName---->" + currentFirebaseUser.getDisplayName());
    } else

    {
        Log.d(TAG, "onComplete: currentUserUid is null");
    }
0
Rahul Jain

同じ問題がありました。別のアカウントからデータにアクセスしたいモデルクラスに新しい属性を作成することで解決しました。

以下に示すように、私のモデルクラスには5つの属性があります。最初は最初の4つだけでした。

public class User {

    public String id;
    public String name;
    public String email;
    public String role;
    public String uid;

    public User() {
    }

    public User(String id, String name, String email, String role, String uid) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.role = role;
        this.uid = uid;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public String getRole() {
        return role;
    }

    public String getUid() {
        return uid;
    }

    public void setId(String id) {
        this.id = id;
    }


    public void setName(String name) {
        this.name = name;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

}

このクラスでは、以前にuid属性を設定していませんでした。そのため、サインインしているとき、別のアカウントのuidにアクセスできません。上記のようにモデルクラスを変更したのはこのためです。これで、他のパラメーターを使用して等しいかどうかを確認するだけで、任意のデータにアクセスできるようになりました。

例えば、

mRef.addValueEventListener(new ValueEventListener() {
        private String role;

        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot: dataSnapshot.getChildren()){
                User user = snapshot.getValue(User.class);

                role = user.getRole();
                if(role!=null){
                    if(role.equals("student")){
                        STUDENT_LIST.add(user);
                    }
                }
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {}
    });

ここで、私はstudentsであるすべてのユーザーを取得していることがわかります。その値にはuidを使用してアクセスできます上記のモデルクラスに、別のサインインアカウントから追加されました。

0
Kiran C Nayak

これを解決する簡単な方法は、ユーザーのメールアドレスとIDを保持する別のモデル(テーブル)を作成することです。この方法で、メールのIDを取得できます。 Javaスクリプトを使用するソリューションがありますが、実行時間が複雑です。

0
Semon