Firebase身份验证和数据库

时间:2018-03-13 09:53:14

标签: java android firebase firebase-realtime-database firebase-authentication

我对Firebase有疑问,我对此不熟悉。我想在登录时返回用户名,但该名称在数据库中,我只想返回名称,当然,与在身份验证中找到的电子邮件一致,也在数据库中。我的想法是将数据库中的电子邮件与Auth进行比较,如果是真的,请给我这个名字。但我不知道如何开发它。解决方案? 谢谢

2 个答案:

答案 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);

如果您有兴趣,我也会在我的一个教程中逐步使用 Google Firebase