如何在不验证电子邮件ID的情况下阻止用户登录首先在Firebase中?

时间:2019-02-09 11:00:04

标签: android firebase firebase-authentication

我在Android Studio中创建了一个应用程序,除了其他几个字段外,用户还使用电子邮件和密码进行了注册。这是我正在使用的代码:

公共类MainActivity扩展了AppCompatActivity {

EditText etName, etService, etDes, etCost, etContact, etPass, etEmail;
Button offer;
CountryCodePicker ccp;
private FirebaseAuth mAuth;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    etName = findViewById(R.id.enterName);
    etService = findViewById(R.id.enterService);
    etDes = findViewById(R.id.enterDescription);
    etCost = findViewById(R.id.enterCost);
    etContact = findViewById(R.id.enterContact);
    etPass = findViewById(R.id.enterPassword);
    etEmail = findViewById(R.id.enterEmail);
    ccp = findViewById(R.id.ccpLogin);

    ccp.registerCarrierNumberEditText(etContact);

    offer = findViewById(R.id.offerBtn);

    mAuth=FirebaseAuth.getInstance();

    offer.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            final String putEmail=etEmail.getText().toString();
            final String putPass=etPass.getText().toString();

            //final String fullNumber = ccp.getFullNumberWithPlus();

            //final String key=fullNumber+putEmail;

            if(notEmpty()){
            mAuth.createUserWithEmailAndPassword(putEmail, putPass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful())
                    {
                        final String putName=etName.getText().toString();
                        final String putService=etService.getText().toString();
                        final String putDes=etDes.getText().toString();
                        final String putCost=etCost.getText().toString();
                        final String putEmail=etEmail.getText().toString();
                        final String putPass=etPass.getText().toString();

                        final String fullNumber = ccp.getFullNumberWithPlus();

                        sendVerificationEmail();
                        //checkVerification(putName,putService,putDes,putCost,fullNumber,putPass,putEmail);
                    }
                    else
                        Toast.makeText(MainActivity.this, "Failed to send EMail", Toast.LENGTH_LONG).show();
                }
            });
            }
            else
                Toast.makeText(MainActivity.this, "All Fields Are Required", Toast.LENGTH_LONG).show();
        }
    });
}

现在我的问题是,有什么方法可以阻止用户注册而无需先验证其电子邮件ID? createUserWithEmailAndPassword()方法似乎在验证用户的电子邮件ID之前先登录用户,我认为这违背了使用电子邮件验证的目的,即阻止用户使用伪造或无效的电子邮件ID进入数据库。如果用户尚未验证自己的电子邮件ID,那么似乎还无法从Firebase的“身份验证”下的“用户”部分删除该用户,因为此时他已经被创建并登录。

1 个答案:

答案 0 :(得分:0)

您可以使用FirebaseUI。它负责登录UI,登录过程,并为您提供了处理电子邮件验证的机会,请查看有关如何进行FirebaseUI电子邮件验证的问题:

Email verification for Firebase Auth UIFirebaseUI

FirebaseUI上试用演示应用