如何通过用户电子邮件Firebase android获取用户ID?
给定一个电子邮件地址,是否可以获取一个人的用户ID?比如说,如何通过用户电子邮件Firebase android获取用户ID?,android,firebase,firebase-realtime-database,firebase-authentication,userid,Android,Firebase,Firebase Realtime Database,Firebase Authentication,Userid,给定一个电子邮件地址,是否可以获取一个人的用户ID?比如说, mRef.addValueEventListener(new ValueEventListener() { private String role; @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { for(DataSnapshot snapshot: dataSna
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) {}
});
如果我有一个可变的电子邮件,其中包含该人的电子邮件。我可以通过这样做来获得他们的身份证吗
String userID = mAuth.DatabaseReference.getuID.(email);
对不起,如果这是个愚蠢的问题
编辑:注意,我正在寻找一个不是当前用户的人的ID。所以我不能使用FirebaseUser=mAuth.getCurrentUser()代码>
我的数据库的结构如下所示,因此ID将存储在数据库中。我只需要一种获取它的方法(在下面的图表中,我没有电子邮件字段,但我将添加一个,以防有人想知道--)
此外,如果可能的话,我想根据他们的电子邮件或一旦我获得了身份证,通过身份证获得他们的个人资料图像
如果您想通过用户的电子邮件在受信任的服务器上查找用户,可以使用Firebase Admin SDK。从:
Firebase身份验证客户端SDK仅提供对当前已验证用户的配置文件的访问。它们不提供通过电子邮件地址查找用户的方法。要允许客户端查找,通常的方法是通过电子邮件地址将UID存储在数据库中:
"emailToUid": {
"SumOne@domain,com": "uidOfSumOne",
"puf@firebaseui,com": "uidOfPuf"
}
使用此简单列表,您可以通过编码的电子邮件地址从以下位置查找UID:
ref.child("emailToUid").child("SumOne@domain,com").addSingleValueEventListener(...
另见:
通过这种方式,您可以使用电子邮件和密码登录用户并检索id:
FirebaseAuth.getInstance().signInWithEmailAndPassword(email,password).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
FirebaseUser user = authResult.getUser();
}
});
FirebaseAuth.getInstance().signInWithEmailAndPassword(电子邮件,密码)。addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公共无效(AuthResult AuthResult){
FirebaseUser=authResult.getUser();
}
});
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");
}
我也遇到了同样的问题,我通过为模型类创建一个新属性来解决了这个问题,您希望从另一个帐户访问该模型类的数据
如下所示,我的模型类现在有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进行访问。解决此问题的简单方法是创建另一个模型(表),它保存用户的电子邮件地址和id。通过这种方式,您可以检索包含电子邮件的id。有一些解决方案使用java脚本,但它们有复杂的运行时间。因此,我需要将uid存储为一个值,不可能通过电子邮件从根元素获取uid?我还可以获取此人(而不是当前用户)的图像配置文件吗?Firebase身份验证客户端SDK仅提供对当前身份验证用户配置文件的访问。我在回答中澄清了这一点。在应用程序端,在没有用户登录的情况下检查登录提供商类型的任何策略。。。要防止重新设置进行社交登录的用户的密码。。。当前正在获取中所有登录邮件id上的重置密码链接android@FrankvanPuffelen将uidToEmail作为密钥不是更符合逻辑吗?我认为电子邮件地址可以为用户更改,但UID不会更改?您必须将点更改为逗号,这是正确的,但请注意,电子邮件地址中允许使用$等字符串,但不能将其作为firebase密钥,因此您还必须将其更改为某种符号。