簡體   English   中英

如何使用 Android Studio 在 firebase 中檢查“用戶電子郵件已經存在”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM