繁体   English   中英

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

[英]Manage Google Login with Firebase when user login second time

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

此方法与使用用户名和密码进行身份验证的效果很好,因为SignUpSignIn是用不同的方法分别管理的。
相反,如果使用Google身份验证,我只能登录(第一次登录就像注册一样)。
Google的Firebase身份验证
我通过在方法updateUI() (当Google SignIn成功执行时调用)内部定义以下方法来应用Firebase文档中提供的示例:

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

其中databasereferencedatabasereference的根目录。 因此,updateUI方法应如下所示:

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


如果是正确的,我不知道该如何处理:

  1. 我第一次正确登录
  2. 我做某事(添加有关我的信息)
  3. 我登出
  4. 我再次登录


在那种情况下,显然我会覆盖所有先前的信息,因为我再次调用了addUser()方法,没有进行任何检查。
同时,我认为在users分支(和特定的userId )下使用侦听器是不正确的,因为我必须下载有关单个用户的所有信息。


是否存在管理我第二次登录Google的方法?
在我使用的方法正确的情况下, 登录时检查用户是否存在的唯一方法是从我的USERS分支下载其信息,或者还有另一种方法? 我可以做什么支票?

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

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

要检查用户的存在,您需要在users节点上附加侦听器,并使用如下的exist 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);

您要检查是否存在的用户的ID在哪个uid中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM