Firestore user.getUsername()返回空值



在我的应用程序中,我使用firebase创建了一个身份验证系统。我没有使用firebase的默认页面,而是在点击按钮后创建了一个带有电子邮件和密码的自定义页面:

mauth.createUserWithEmailAndPassword(lEmail, lPassowrd)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{
userManager.createUser();  //CREER USER DANS DATABASE FIRESTORE (PAREIL POUR EMAIL)
Toast.makeText(SignupActivity.this, "Account created !", Toast.LENGTH_SHORT).show();
startActivity(new Intent(SignupActivity.this, LoginActivity.class));
} else{
Toast.makeText(SignupActivity.this, "Registration error: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}});

我添加了一行来在FireStore中创建用户,稍后在代码中我使用FireStore数据来更新他的用户名和图片。这将导致崩溃,因为用户名为空。

当我检查Firestore数据库时,创建了一个带有id的用户,但个人资料图片和用户名为空。知道为什么吗?当我只是使用来自FireBase认证的信息时,用户有一个id和一个用户名(没有图片,但没关系)。

这是在FireStore上创建用户的函数,之前称为:

public void createUser() {
FirebaseUser user = getCurrentUser();
if(user != null){
String urlPicture = (user.getPhotoUrl() != null) ? user.getPhotoUrl().toString() : null;
String username = user.getDisplayName();
//QUAND ON CREER UN DOCUMENT SUR FIRESTORE IL A AUTO UN ID UNIQUE
//MAIS DANS NOTRE CAS L'USER A UN ID LORSQUON L'A CREER AVEC L'AUTHENTIFICATION
String uid = user.getUid();
User userToCreate = new User(uid, username, urlPicture);
Task<DocumentSnapshot> userData = getUserData();
// If the user already exist in Firestore, we get his data (isMentor)
userData.addOnSuccessListener(documentSnapshot -> {
//if (documentSnapshot.contains(IS_MENTOR_FIELD)){
//userToCreate.setIsMentor((Boolean) documentSnapshot.get(IS_MENTOR_FIELD));
//}
this.getUsersCollection().document(uid).set(userToCreate);
});
}
}

一个解决方案将非常感激,因为我被困在这个现在一段时间

编辑:

我试着这样修改displayName:

mauth.createUserWithEmailAndPassword(lEmail, lPassowrd)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{

FirebaseUser user = mauth.getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder().setDisplayName(lUsername).build();
//user.updateProfile(profileUpdates);
user.updateProfile(profileUpdates)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d("filds", "User profile updated.");
}
}
});
userManager.createUser();  //CREER USER DANS DATABASE FIRESTORE (PAREIL POUR EMAIL)

Toast.makeText(SignupActivity.this, "Account created !", Toast.LENGTH_SHORT).show();
startActivity(new Intent(SignupActivity.this, LoginActivity.class));
} else{
Toast.makeText(SignupActivity.this, "Registration error: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}});

日志显示"用户资料更新"。但是在FireStore中用户名仍然是空的:/

当我检查Firestore数据库时,创建了一个具有id的用户,但个人资料图片和用户名为空。知道为什么吗?

当您使用电子邮件和密码验证您的用户时,这意味着创建了一个FirebaseUser类型的新实例。由于您只从用户那里获得电子邮件地址和密码,因此该类中唯一填充的字段是"email"。由于没有涉及用户名,也没有个人资料图片,因此当您使用getDisplayName()或getPhotoUrl()时,您获得的结果为空,因此该结果。如果您也想填充这些字段,那么您应该考虑从用户那里获取这些信息,或者使用一个可用的提供者。它可以是谷歌、Facebook或任何其他提供商。通过这种方式,您将同时填充用户名和个人资料图片URL。

最新更新