首页 文章

Firebase Auth UI的电子邮件验证

提问于
浏览
9

我在Android应用程序中使用 firebase auth UIFirebaseUI-Android),用户可以使用个人 emailFacebooknumberGmail 帐户进行注册 . 我的问题是,当用户使用他的个人电子邮件ID登录时,我需要获得电子邮件验证 .

List<AuthUI.IdpConfig> providers = Arrays.asList(
        new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
        new AuthUI.IdpConfig.Builder(AuthUI.PHONE_VERIFICATION_PROVIDER).build(),
        new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build(),
        new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build());

    startActivityForResult(
        AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setIsSmartLockEnabled(true)
                .setTheme(R.style.GreenTheme)
                .setTosUrl("https://termsfeed.com/blog/terms-conditions-mobile-apps/")
                .setPrivacyPolicyUrl("https://superapp.example.com/privacy-policy.html")
                .setAvailableProviders(providers)
                .build(),
        RC_SIGN_IN);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // RC_SIGN_IN is the request code you passed into startActivityForResult(...) when starting the sign in flow.
    if (requestCode == RC_SIGN_IN) {
        IdpResponse response = IdpResponse.fromResultIntent(data);
        // Successfully signed in
        if (resultCode == RESULT_OK) {
            startActivity(new Intent(Login.this,MainActivity.class));
            finish();
            return;
        } else {
            // Sign in failed
            if (response == null) {
                Toasty.error(getApplicationContext(),"Sign in cancelled",Toast.LENGTH_SHORT, true).show();
                return;
            }

            if (response.getErrorCode() == ErrorCodes.NO_NETWORK) {
                Toasty.error(getApplicationContext(),"No internet connection",Toast.LENGTH_SHORT, true).show();
                return;
            }

            if (response.getErrorCode() == ErrorCodes.UNKNOWN_ERROR) {
                Toasty.error(getApplicationContext(),"Unkown Error",Toast.LENGTH_SHORT, true).show();
                return;
            }
        }
        Toasty.error(getApplicationContext(),"Unknown sign in response",Toast.LENGTH_SHORT, true).show();
    }
}

这是我注册选项的意图 .

enter image description here

1 回答

  • 3

    您可以按如下方式执行此操作,

    • 获取当前的Firebase用户实例,
    final FirebaseUser currentUser = mAuth.getCurrentUser();
    
    • 检查提供者是否为 password ,表明使用的登录方法是 Email Auth
    if(null != currentUser) {
        if("password".equals(currentUser.getProviderData().get(0).getProviderId())) {
            /* Handle Verification */
        }
    }
    

    Reference Linkhttps://firebase.google.com/docs/reference/android/com/google/firebase/auth/EmailAuthProvider#PROVIDER_ID

    • 检查用户是否已经过验证,
    currentUser.isEmailVerified();
    
    • 如果用户未经过验证,则可以使用以下代码发送验证电子邮件,
    if (!currentUser.isEmailVerified()) {
        /* Do Something */
    }
    
    /* Send Verification Email */
    currentUser.sendEmailVerification()
            .addOnCompleteListener(this, new OnCompleteListener() {
                @Override
                public void onComplete(@NonNull Task task) {
                    /* Check Success */
                    if (task.isSuccessful()) {
                        Toast.makeText(getApplicationContext(),
                                "Verification Email Sent To: " + currentUser.getEmail(),
                                Toast.LENGTH_SHORT).show();
                    } else {
                        Log.e(TAG, "sendEmailVerification", task.getException());
                        Toast.makeText(getApplicationContext(),
                                "Failed To Send Verification Email!",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            });
    

    一旦完成了所有部分,最终的代码片段应如下所示:

    Final Code Snippet:

    if (requestCode == RC_SIGN_IN) {
        IdpResponse response = IdpResponse.fromResultIntent(data);
    
        /* Success */
        if (resultCode == RESULT_OK) {
            final FirebaseUser currentUser = mAuth.getCurrentUser();
    
            if(null != currentUser) {
                if("password".equals(currentUser.getProviderData().get(0).getProviderId())) {
                    if(!currentUser.isEmailVerified()) {
                        /* Send Verification Email */
                        currentUser.sendEmailVerification()
                            .addOnCompleteListener(this, new OnCompleteListener() {
                                @Override
                                public void onComplete(@NonNull Task task) {
                                    /* Check Success */
                                    if (task.isSuccessful()) {
                                        Toast.makeText(getApplicationContext(),
                                                "Verification Email Sent To: " + currentUser.getEmail(),
                                                Toast.LENGTH_SHORT).show();
                                    } else {
                                        Log.e(TAG, "sendEmailVerification", task.getException());
                                        Toast.makeText(getApplicationContext(),
                                                "Failed To Send Verification Email!",
                                                Toast.LENGTH_SHORT).show();
                                    }
                                }
                            });
    
                        /* Handle Case When Email Not Verified */
                    }
                }
    
                /* Login Success */
                startActivity(new Intent(Login.this, MainActivity.class));
                finish();
                return;
            }
        } else {
            /* Handle Failure */
        }
    }
    

相关问题