繁体   English   中英

使用FirebaseUI-auth时,如何在无需再次登录的情况下验证电子邮件?

[英]How to verify email without the need of signing in again while using FirebaseUI-auth?

我在我的应用程序中使用FirebaseUI-auth ,以便使用电子邮件和Facebook登录用户。

当用户使用电子邮件登录时,他将被带到一个屏幕,该屏幕显示要求他验证电子邮件的文本。

这是我的代码:

    continue_button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    startActivityForResult(
                            // Get an instance of AuthUI based on the default app
                            AuthUI.getInstance()
                                    .createSignInIntentBuilder()
                                    .setProviders(Arrays.asList(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
                                            new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build()))
                                    .setIsSmartLockEnabled(!BuildConfig.DEBUG)
                                    .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 == ResultCodes.OK) {
                Intent intent = new Intent(SignUpActivity.this, MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(intent);
                return;
            } else {
                // Sign in failed
                if (response == null) {
                    // User pressed back button
                    Toast.makeText(getBaseContext(), "Sign in cancelled", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (response.getErrorCode() == ErrorCodes.NO_NETWORK) {
                    Toast.makeText(getBaseContext(), "No internet", Toast.LENGTH_SHORT).show();
                    return;
                }

                if (response.getErrorCode() == ErrorCodes.UNKNOWN_ERROR) {
                    Toast.makeText(getBaseContext(), "Unknown error", Toast.LENGTH_SHORT).show();
                    return;
                }
            }

            Toast.makeText(getBaseContext(), "Unknown sign in response", Toast.LENGTH_SHORT).show();
        }
    }

当他单击发送给他的验证链接时,他的电子邮件得到了验证,但是现在当他返回到应用程序时,或者当他关闭并重新打开应用程序时,屏幕仍显示文本以验证电子邮件,并且当他注销并签名时在验证电子邮件后再次输入,则仅允许他访问该应用。

这是确定电子邮件是否经过验证的代码:

if (auth.getCurrentUser() != null) {
            if (auth.getCurrentUser().getProviders().contains("password")) {

                boolean emailVerified = auth.getCurrentUser().isEmailVerified();

                if (emailVerified) {

                    Toast.makeText(getBaseContext(), "Email has been verified", Toast.LENGTH_SHORT).show();
                    emailNotVerifiedTxt.setVisibility(View.INVISIBLE);
                    openEmailBtn.setVisibility(View.INVISIBLE);

                } else {

                    emailNotVerifiedTxt.setVisibility(View.VISIBLE);
                    openEmailBtn.setVisibility(View.VISIBLE);
                    auth.getCurrentUser().sendEmailVerification()
                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {
                                        Snackbar snackbar = Snackbar
                                                .make(coordinatorLayout, "An email verification link has been sent to " + auth.getCurrentUser().getEmail(), Snackbar.LENGTH_LONG);
                                        snackbar.show();
                                    }
                                }
                            });

                }
            }
        }

这是onResume()

@Override
    protected void onResume() {
        super.onResume();

        if (auth != null) {
            if (auth.getCurrentUser() != null) {
                auth.getCurrentUser().reload();
            }
        }

    }

我想知道的是,如何在用户验证电子邮件后如何让用户完全访问该应用程序而无需注销并再次登录?

请告诉我。

在currentUser上调用reload()应该更新isEmailVerified()状态。 因此,您可以做的一件事是,当应用恢复时,重新加载用户,检查是否通过验证,如果没有通过验证,请用户验证其帐户,否则让用户继续使用该应用。 这样,用户将不需要每次都重新登录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM