我对Firebase有疑问,我对此不熟悉。我想在登录时返回用户名,但该名称在数据库中,我只想返回名称,当然,与在身份验证中找到的电子邮件一致,也在数据库中。我的想法是将数据库中的电子邮件与Auth进行比较,如果是真的,请给我这个名字。但我不知道如何开发它。解决方案? 谢谢
答案 0 :(得分:0)
我认为你不需要遇到那么多麻烦。
关注this,它可能会对您有所帮助。您无需进行电子邮件匹配。 Firebase为每个用户提供唯一的用户ID。一旦用户注册到您的系统,firebase就会提供该ID。您只需将其保存在数据库中作为该用户的主键。然后,您可以使用用户ID从数据库中获取数据。用户ID可以使用firebase.auth().currentUser.uid()
答案 1 :(得分:0)
为了实现这一目标,您需要使用如下所示的模型类:
public class UserModel implements Serializable {
private String userEmail;
private String userName;
public UserModel() {}
public UserModel(String userEmail, String userName) {
this.userEmail = userEmail;
this.userName = userName;
}
public String getUserEmail() {return userEmail;}
public String getUserName() {return userName;}
}
要实际添加用户,请使用以下代码:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
UserModel userModel = new UserModel("john@email,com", "John");
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
usersRef.child(uid).setValue(userModel);
您的数据库结构如下所示:
Firebase-root
|
--- users
|
--- uid
|
--- userEmail: "john@email,com"
|
--- userName: "John"
此外,要获取userName
,请使用以下代码:
DatabaseReference uidRef = usersRef.child(uid);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()) {
String userName = dataSnapshot.child("userName").getValue(String.class);
nombre.setText(userName);
Log.d("TAG", userName);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
uidRef.addListenerForSingleValueEvent(eventListener);