![](/img/trans.png)
[英]Force password in Firebase Google signin every time the user login
[英]Manage Google Login with Firebase when user login second time
我正在开发使用Firebase的Android应用程序,并使用Google登录名登录。
我想存储有关用户的额外信息,例如email
, name
和其他信息。
因此,我在Firebase上创建了一个单独的分支,称为users
,当用户成功登录时,我将这些信息写入该分支。
此方法与使用用户名和密码进行身份验证的效果很好,因为SignUp和SignIn是用不同的方法分别管理的。
相反,如果使用Google身份验证,我只能登录(第一次登录就像注册一样)。
Google的Firebase身份验证
我通过在方法updateUI()
(当Google SignIn成功执行时调用)内部定义以下方法来应用Firebase文档中提供的示例:
void addUser(User user) {
databasereference.child(USERS).child(user.getuserid()).setvalue(user);
}
其中databasereference
是databasereference
的根目录。 因此,updateUI方法应如下所示:
void updateUI(FirebaseUser user) {
if(user != null) {
User myUser = new User(user.getDisplayName(), user.getEmail(), user.getUid());
addUser(myUser);
}
}
如果是正确的,我不知道该如何处理:
在那种情况下,显然我会覆盖所有先前的信息,因为我再次调用了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.