【发布时间】:2021-09-12 07:34:01
【问题描述】:
在我的应用程序中,我使用 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();
}
}});
logcat 显示“用户配置文件已更新”。但用户名在 FireStore 中仍然为空:/
【问题讨论】:
-
我可以看到您正在使用 displayName 作为用户名,但您没有更新 displayName。您需要在 successListener 中执行此操作,并且只有在完成后才调用 createUser()
-
我尝试过并编辑我的帖子以显示修改,如果您有任何想法,仍然无法正常工作
标签: android firebase google-cloud-firestore firebase-authentication