给定一个电子邮件地址,是否可以获取某个人的用户ID?例如,
如果我有一封可变电子邮件,其中包含此人的电子邮件。我可以通过做
这样的事来获取他们的IDString userID = mAuth.DatabaseReference.getuID.(email);
对不起,如果这是一个愚蠢的问题。
编辑:注意,我希望获得不是当前用户的人的ID。所以我不能使用FirebaseUser user = mAuth.getCurrentUser();
我的数据库结构如下所示,因此ID已存储在数据库中。我只需要一种方法来获取它(在下面的图表中我没有电子邮件领域,但我会添加一个,因为任何人都想知道-_-)。
此外,如果可能的话,我希望根据他们的电子邮件或一旦我通过身份证获得身份证明来获取他们的个人资料图片。
答案 0 :(得分:17)
如果要通过受信任服务器上的电子邮件查找用户,可以使用Firebase Admin SDK。来自documentation on retrieving user data:
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身份验证的客户端SDK仅提供对当前经过身份验证的用户的配置文件的访问。他们没有提供通过电子邮件地址查找用户的方法。要允许客户端查找,通常的方法是将UID-by-email-address存储在数据库中:
"emailToUid": {
"SumOne@domain,com": "uidOfSumOne",
"puf@firebaseui,com": "uidOfPuf"
}
使用此简单列表,您可以通过以下编码电子邮件地址查找UID:
ref.child("emailToUid").child("SumOne@domain,com").addSingleValueEventListener(...
另见:
答案 1 :(得分:0)
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");
}
答案 2 :(得分:0)
我遇到了同样的问题,我通过为要从另一个帐户访问其数据的模型类创建新属性来解决了该问题。
如下所示,我的模型类现在有5个属性。最初只是前四个。
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) {}
});
在这里您可以看到我正在带走所有学生用户,可以使用添加到其中的 uid 访问其值上面的模型类,来自另一个登录帐户。
答案 3 :(得分:0)
解决此问题的简单方法是创建另一个模型(表),其中包含用户的电子邮件地址和ID。这样,您可以检索具有电子邮件的ID。有使用Java脚本的解决方案,但是它们具有复杂的运行时间。
答案 4 :(得分:-1)
这样您就可以使用电子邮件和密码登录用户并检索ID:
FirebaseAuth.getInstance().signInWithEmailAndPassword(email,password).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
FirebaseUser user = authResult.getUser();
}
});