gpt4 book ai didi

java - 如果用户不存在如何创建?

转载 作者:行者123 更新时间:2023-12-02 12:28:04 26 4
gpt4 key购买 nike

当用户首次在应用程序中使用您的 Google 帐户登录时,我进行了此 Activity 以在数据库中创建用户。它正在工作,但在数据库中创建了多个用户,我不知道为什么。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_account);

mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {

@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

if (firebaseAuth.getCurrentUser() == null) {
goLogInScreen();
} else {
final String userGoogleEmail = firebaseAuth.getCurrentUser().getEmail();
databaseUser.orderByChild("userEmail").equalTo(userGoogleEmail).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
//User already exists
} else {
//Can create new user
String id = databaseUser.push().getKey();
User user = new User(id, userGoogleEmail, null);
databaseUser.child(id).setValue(user);
}
}

@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
};

最佳答案

发生这种情况是因为您使用 push() 方法生成的 key 作为标识符,而不是另一个标识符,这实际上会再次创建用户,即使存在于您的数据库中。

我建议您做的是稍微改变在数据库中保存数据的逻辑。因此,为了解决您的问题,我建议您使用电子邮件地址作为标识符来代替该 key ,因为它也是唯一的。您的数据库应如下所示:

Firebase-database
|
--- Users
|
--- jon@email,com
| |
| --- //data
|
--- jack@email,com
|
--- //data

正如您可能看到的,我已使用 ,(逗号)而不是 .(点)将电子邮件地址保存在 Firebase 数据库中。

name@email.com -> name@email,com

这是因为 Firebase 不允许在键名称中包含诸如 . 之类的符号。因此,要存储这样的值,需要编码的电子邮件。为了实现这一目标,我建议您使用以下方法:

String encodeUserEmail(String userEmail) {
return userEmail.replace(".", ",");
}

String decodeUserEmail(String userEmail) {
return userEmail.replace(",", ".");
}

要验证用户是否存在,只需将监听器放在 Users 节点上,然后在 dataSnapshot 对象上使用 exists() 方法,如下所示:

DatabaseReference usersRef = usersDatabaseReference.child(userEmail);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists()) {
//create user
}
}

@Override
public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(valueEventListener);

希望这能解决您的问题。

关于java - 如果用户不存在如何创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45405822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com