[英]Users are added to Firebase Auth but not Firebase Realtime Database
我正在嘗試在我的 Android 應用程序中創建一個注冊頁面,但我已經為一個錯誤苦苦掙扎了幾天。 將用戶添加到 Firebase 時,它顯示在身份驗證頁面中,但實時數據庫保持清晰(未創建子項)...在第一次按下“注冊”按鈕時,用戶被添加到身份驗證但出於某種原因,沒有 Toast 出現。 在第二次按下時,一個 Toast 彈出說“注冊失敗”(因為該帳戶已經創建)。
如何將用戶添加到數據庫? 我的代碼有問題嗎?
這是代碼:
private void registerUser() {
final String email = edEmail.getText().toString().trim();
final String password = edPassword.getText().toString().trim();
final String confirmPassword = edConfirmPassword.getText().toString().trim();
if (email.isEmpty()) {
edEmail.setError("An Email is required!");
edEmail.requestFocus();
return;
}
if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
edEmail.setError("Please provide a valid Email!");
edEmail.requestFocus();
return;
}
if (password.isEmpty()) {
edPassword.setError("A password is required!");
edPassword.requestFocus();
return;
}
if (password.length() < 8) {
edPassword.setError("The password is too short!");
edPassword.requestFocus();
return;
}
if (!password.equals(confirmPassword)) {
edConfirmPassword.setError("The passwords in both fields must match!");
edConfirmPassword.requestFocus();
return;
}
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull @NotNull Task<AuthResult> task) {
if (task.isSuccessful()) {
User user = new User(email, password);
FirebaseDatabase.getInstance().getReference("Users")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.setValue(user)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull @NotNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(RegisterPage.this, "User has been registered successfully", Toast.LENGTH_LONG).show();
Log.i("RegisterPage", "User has been registered successfully");
goToLoginPage();
} else {
Toast.makeText(RegisterPage.this, "Failed to register user!", Toast.LENGTH_LONG).show();
Log.i("RegisterPage", "Failed to register user!");
}
}
});
} else {
Toast.makeText(RegisterPage.this, "Failed to register!", Toast.LENGTH_LONG).show();
Log.i("RegisterPage", "Failed to register!");
}
}
});
}
第一次按“注冊”后,進入第一個if(task.isSuccessful())
,表示任務成功。 然后它只是跳過第二個OnComplete
(數據庫之一)。 第二次按下“Register”后,第一個if(task.isSuccessful())
為 false,因此它轉到下面的else
並彈出一個 toast(因為用戶已經創建並且位於 Firebase 的 Auth 頁面中)。 在第一次按下task.getException()
之后什么都不返回,在第二次之后它返回:
2021-05-24 02:37:00.678 24492-24492/com.fulminatix.gymlog W/RegisterPage: createUserWithEmail:failure
com.google.firebase.auth.FirebaseAuthUserCollisionException: The email address is already in use by another account.
at com.google.android.gms.internal.firebase-auth-api.zzto.zza(com.google.firebase:firebase-auth@@21.0.1:25)
at com.google.android.gms.internal.firebase-auth-api.zzuw.zza(com.google.firebase:firebase-auth@@21.0.1:9)
at com.google.android.gms.internal.firebase-auth-api.zzux.zzl(com.google.firebase:firebase-auth@@21.0.1:1)
at com.google.android.gms.internal.firebase-auth-api.zzuu.zzk(com.google.firebase:firebase-auth@@21.0.1:25)
at com.google.android.gms.internal.firebase-auth-api.zztl.zzh(com.google.firebase:firebase-auth@@21.0.1:1)
at com.google.android.gms.internal.firebase-auth-api.zzoc.zza(com.google.firebase:firebase-auth@@21.0.1:2)
at com.google.android.gms.internal.firebase-auth-api.zzvb.zza(com.google.firebase:firebase-auth@@21.0.1:23)
at com.google.android.gms.internal.firebase-auth-api.zzul.zzn(com.google.firebase:firebase-auth@@21.0.1:4)
at com.google.android.gms.internal.firebase-auth-api.zzpt.zzl(com.google.firebase:firebase-auth@@21.0.1:5)
at com.google.android.gms.internal.firebase-auth-api.zztp.zzg(com.google.firebase:firebase-auth@@21.0.1:8)
at com.google.android.gms.internal.firebase-auth-api.zzqg.accept(com.google.firebase:firebase-auth@@21.0.1:3)
at com.google.android.gms.common.api.internal.zacj.doExecute(com.google.android.gms:play-services-base@@17.1.0:2)
at com.google.android.gms.common.api.internal.zaf.zac(com.google.android.gms:play-services-base@@17.1.0:6)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zac(com.google.android.gms:play-services-base@@17.1.0:167)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zab(com.google.android.gms:play-services-base@@17.1.0:139)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zabg(com.google.android.gms:play-services-base@@17.1.0:99)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.zabe(com.google.android.gms:play-services-base@@17.1.0:40)
at com.google.android.gms.common.api.internal.GoogleApiManager$zaa.onConnected(com.google.android.gms:play-services-base@@17.1.0:19)
at com.google.android.gms.common.internal.zaf.onConnected(com.google.android.gms:play-services-base@@17.1.0:2)
at com.google.android.gms.common.internal.BaseGmsClient$zzg.zzj(com.google.android.gms:play-services-basement@@17.1.0:24)
at com.google.android.gms.common.internal.BaseGmsClient$zza.zza(com.google.android.gms:play-services-basement@@17.1.0:12)
at com.google.android.gms.common.internal.BaseGmsClient$zzb.zzo(com.google.android.gms:play-services-basement@@17.1.0:11)
at com.google.android.gms.common.internal.BaseGmsClient$zzc.handleMessage(com.google.android.gms:play-services-basement@@17.1.0:49)
at android.os.Handler.dispatchMessage(Handler.java:106)
at com.google.android.gms.internal.common.zzi.dispatchMessage(com.google.android.gms:play-services-basement@@17.1.0:8)
at android.os.Looper.loop(Looper.java:246)
at android.os.HandlerThread.run(HandlerThread.java:67)
出色地。 我發現了問題。 我使用的是 europe-west1 數據庫,而不是默認的 us-central1,顯然:
要獲取對 us-central1 默認 dstabase 以外的數據庫的引用,您必須將數據庫 URL 傳遞給 getInstance()(或 Kotlin+KTX database())。 對於 us-central1 默認數據庫,您可以在沒有 arguments 的情況下調用 getInstance()(或數據庫)。 您可以在 Firebase 控制台的實時數據庫部分找到您的實時數據庫 URL。 其格式為 https://.firebaseio.com(對於 us-central1 數據庫)或 https://.firebasedatabase.app(對於所有其他位置的數據庫)。
將我的實時數據庫 URL 添加到getInstance()
中解決了我的問題。 示例: FirebaseDatabase.getInstance("https://XXXXXXXX.europe-west1.firebasedatabase.app/")
感謝@FrankvanPuffelen 提出問題!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.