[英]How to check if a user already exists in firebase during phone auth
[英]How to check "user email already exists" in firebase using Android Studio
我正在嘗試更改我的代碼。 但是,它失敗了。 我的輸出還是一樣。 也就是說,如果用戶放置了一個已經存在或不存在的電子郵件。 驗證“此電子郵件已被注冊。” 還是出來了。 為什么? 有人我的編碼有什么問題嗎?
這是我的方法:-
public boolean isCheckEmail(final String email)
{
mAuth.fetchProvidersForEmail(email).addOnCompleteListener(new OnCompleteListener<ProviderQueryResult>()
{
@Override
public void onComplete(@NonNull Task<ProviderQueryResult> task)
{
boolean check = !task.getResult().getProviders().isEmpty();
if(check)
{
Toast.makeText(Signup.this, "This email has been registered.", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(Signup.this, "This email has been registered.", Toast.LENGTH_SHORT).show();
}
}
});
return true;
}
雖然這半編碼,我試圖回調方法 isCheckEmail:-
private void RegisterAccount(String firstname, String lastname, String email, String password, String confirmpass)
{
if (TextUtils.isEmpty(email))
{
Toast.makeText(Signup.this, "Enter your email address.", Toast.LENGTH_SHORT).show();
}
else if (!isValidEmail(email)) {
Toast.makeText(Signup.this,"Please enter your valid email address.",Toast.LENGTH_SHORT).show();
}
else if (!isCheckEmail(email))
{
Toast.makeText(Signup.this, "This email has been registered.", Toast.LENGTH_SHORT).show();
}
fetchProvidersForEmail 是一個異步調用,因此您必須在回調中使用其返回值。
在主線程上返回 true 將不起作用。
這是解決方案:
首先用方法創建接口(成功)
public interface OnEmailCheckListener(){
void onSuccess(boolean isRegistered);
}
你的 checkEmail 方法應該是這樣的:
public void isCheckEmail(final String email,final OnEmailCheckListener listener){
mAuth.fetchProvidersForEmail(email).addOnCompleteListener(new OnCompleteListener<ProviderQueryResult>()
{
@Override
public void onComplete(@NonNull Task<ProviderQueryResult> task)
{
boolean check = !task.getResult().getProviders().isEmpty();
listener.onSuccess(check);
}
});
}
最后像這樣調用你的 isCheckEmail :
isCheckEmail("yourEmail@test.com",new OnEmailCheckListener(){
@Override
void onSuccess(boolean isRegistered){
if(isRegistered){
//The email was registered before
} else {
//The email not registered before
}
}
});
希望這對你有幫助。
此方法可用於檢查電子郵件是否存在
void checkEmailExistsOrNot(){
firebaseauth.fetchSignInMethodsForEmail(email.getText().toString()).addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
@Override
public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
Log.d(TAG,""+task.getResult().getSignInMethods().size());
if (task.getResult().getSignInMethods().size() == 0){
// email not existed
}else {
// email existed
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
e.printStackTrace();
}
});
}
Firebase 會自動告訴您要創建帳戶的電子郵件是否已經存在。 創建帳戶時,您應該檢查任務是否成功
if(task.isSuccessful()) {} // you have this code in your last bit of code
else{} // you have this in your code already
(
您目前擁有代碼
Toast.makeText(getApplicationContext(), "registration not performed", Toast.LENGTH_SHORT).show();
(它幾乎是您提供的代碼中的最后一行)但您應該將其替換為:
try {
throw task.getException();
} catch(FirebaseAuthUserCollisionException e) {
// email already in use
Toast.makeText(getApplicationContext(), "Email already taken!", Toast.LENGTH_SHORT).show();
}
因此,您不需要自己檢查電子郵件是否存在,因為 Firebase 會自動拋出異常,然后您可以例如顯示吐司。
Sai Gopi Me 的回答的 Kotlin 版本
fun checkEmailExistsOrNot() {
FirebaseAuth
.getInstance()
.fetchSignInMethodsForEmail(binding.etEmail.value())
.addOnCompleteListener { task ->
Log.d(TAG, "" + task.result?.signInMethods?.size)
if (task.result?.signInMethods?.size === 0) {
// email not existed
Log.d(TAG, "email not existed")
} else {
// email existed
Log.d(TAG, "checkEmailExistsOrNot: ")
}
}.addOnFailureListener {
e -> e.printStackTrace()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.