用户第二次登录时使用Firebase管理Google登录

时间:2017-12-01 19:17:06

标签: android firebase firebase-realtime-database firebase-authentication google-login

我正在开发一个使用Firebase的Android应用程序并登录我使用Google登录。
我想存储有关用户的额外信息,例如emailname和其他信息。< br />为此我在Firebase上创建了一个名为users的独立分支,当用户成功登录时,我将这些信息写入该分支。

这种方法适用于用户名和密码,因为 SignUp SignIn 分别使用不同的方法管理。
相反,使用Google身份验证,如果我正确,我只能登录(第一次登录就像注册一样)。
Firebase authentication with Google
我通过在方法updateUI()内调用(在Google SignIn成功时调用)来应用Firebase文档中提供的示例,其中定义了以下方法:

    void addUser(User user) {
      databasereference.child(USERS).child(user.getuserid()).setvalue(user);
    }

其中databasereference是我的数据库的根。所以updateUI方法应如下所示:

void updateUI(FirebaseUser user) {
    if(user != null) {
        User myUser = new User(user.getDisplayName(), user.getEmail(), user.getUid());
        addUser(myUser);
    }
}


如果它是正确的,我不知道如何处理这种情况:

  1. 我第一次正确登录
  2. 我做某事(添加关于我的信息)
  3. 我退出
  4. 我再次登录
  5. 在这种情况下,显然我会覆盖所有以前的信息,因为我再次调用方法addUser()而没有任何检查。
    同时,我认为在{{下使用一个监听器1}}分支(和特定users)不正确,因为我必须下载有关单个用户的所有信息。


    第二次登录Google时是否存在管理方式?
    在我使用的方法是正确的情况下,在登录时检查用户是否存在的唯一方法是从我的userId&#39;中下载他的信息。分支还是有另一种方式?我可以做什么类型的检查?

1 个答案:

答案 0 :(得分:1)

假设您有一个如下所示的数据库:

Firebase-root
    |
    --- users
          |
          --- uid1
          |
          --- uid2

要检查用户的existens,您需要在users节点上附加一个监听器并使用exists()方法,如下所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = rootRef.child("users").child(uid);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(!dataSnapshot.exists()) {
            //Create user
        } else {
            //Do something else
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
userRef.addListenerForSingleValueEvent(eventListener);

其中uid是您要检查的用户的ID(如果存在)。