Как сначала отправить подтверждение электронной почты в firebase, а затем создать учетную запись? - PullRequest
0 голосов
/ 05 октября 2019

В моей деятельности по регистрации пользователь должен ввести адрес электронной почты, а затем пароль, который длиннее 6, имеет специальный знак и т. Д. Проблема заключается в том, что после сопоставления всех требований к паролю пользователь нажимает кнопку регистрации, а затемпоявляется всплывающее сообщение о том, что электронное письмо отправлено, но в то же время пользователь входит в систему. При нажатии на кнопку «Назад» на телефоне пользователь находится в приложении, которым он должен быть, только когда он подтвердил свой адрес.

Вот часть моей деятельности по регистрации электронной почты:

btnSignUp.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        String email = inputEmail.getText().toString();
        String password = inputPassword.getText().toString();
        String passwordConfirm = inputPasswordConfirm.getText().toString();

        if (password.length() < 6) {
            Toast.makeText(getApplicationContext(), "Das Passwort ist zu kurz, gebe mindestens 6 Zeichen ein.", Toast.LENGTH_SHORT).show();
            return;
        }

        if (!password.matches("^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}$")){
            Toast.makeText(RegistrationEmailActivity.this, "Dein Passwort hat mindestens eine der folgenden Anforderungen nicht: Großbuchstaben, Zahl, Spezialzeichen.", Toast.LENGTH_SHORT).show();
            return;
        }

        if (TextUtils.isEmpty(passwordConfirm)){
            Toast.makeText(getApplicationContext(), "Bestätige dein Passwort", Toast.LENGTH_SHORT).show();
        }
        else if (!password.equals(passwordConfirm)){
            Toast.makeText(getApplicationContext(), "Die Passwörter stimmen nicht überein. Bitte überprüfe deine Eingabe.", Toast.LENGTH_SHORT).show();
        }
        else {

            progressBar.setVisibility(View.VISIBLE);
            //create user
            auth.createUserWithEmailAndPassword(email, password)
                    .addOnCompleteListener( new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            Toast.makeText(RegistrationEmailActivity.this, "Welcome to the app", Toast.LENGTH_SHORT).show();
                            progressBar.setVisibility(View.GONE);

                            if (!task.isSuccessful()) {
                                Toast.makeText(RegistrationEmailActivity.this, "Authentication failed." + task.getException(),
                                        Toast.LENGTH_SHORT).show();
                            } else {
                                auth.getCurrentUser().sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()){
                                        Toast.makeText(RegistrationEmailActivity.this, "Du wurdest erfolgreich registriert. Schau in deinem Postfach nach und klicke auf den Link, " +
                                                "damit die E-Mail verifiziert wird und du dich einloggen kannst.", Toast.LENGTH_SHORT).show();
                                    }else {
                                        Toast.makeText(RegistrationEmailActivity.this, "Das hat leider nicht geklappt. Überprüfe deine E-Mail und versuche es erneut.", Toast.LENGTH_SHORT).show();
                                    }
                                    }
                                });
                            }

                        }
                    });
        }

    }
});

Я использовал этот учебник https://www.youtube.com/watch?v=06YKlMdWyMM для проверки электронной почты. В 19:09 я думаю, что он показывает какое-то решение проблемы, но я не знаю, где реализовать этот код.

1 Ответ

1 голос
/ 05 октября 2019

Когда вы создаете учетную запись в Firebase Authentication, этот пользователь автоматически входит в систему. Нет никакого способа предотвратить это, и это - предполагаемое поведение.

Если вы хотите разрешить только доступ пользователя кнекоторые экраны в вашем приложении после того, как они подтвердили свой адрес электронной почты, вы можете проверить isEmailVerified в своем коде перед переходом на этот экран.

Если вы хотите запретить доступ непроверенного пользователя к определенномуданные в вашей базе данных (Firebase Realtime Database, Cloud Firestore или Cloud Storage) вы можете проверить токен пользователя в ваших правилах безопасности, чтобы убедиться, что его адрес электронной почты проверен .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...