Как изменить электронную почту в firebase auth?

Я пытаюсь изменить/обновить адрес электронной почты пользователя, используя:

firebase.auth().changeEmail({oldEmail, newEmail, password}, cb)

Но я получаю ... changeEmail не является ошибкой функции. Я нашел ссылку здесь из старого документа о пожарной базе.

Так как мне сделать это в версии 3.x? Потому что я не могу найти ссылку в новой документации.

Ответ 1

Вы ищете метод updateEmail() для объекта firebase.User: https://firebase.google.com/docs/reference/js/firebase.User#updateEmail

Поскольку это объект user, ваш пользователь уже должен будет войти в систему. Следовательно, он требует только пароль.

Простое использование:

firebase.auth()
    .signInWithEmailAndPassword('[email protected]', 'correcthorsebatterystaple')
    .then(function(userCredential) {
        userCredential.user.updateEmail('[email protected]')
    })

Ответ 2

Вы можете сделать это напрямую с AngularFire2, вам просто нужно добавить "currentUser" в ваш путь.

this.af.auth.currentUser.updateEmail(email)
.then(() => {
  ...
});

Вам также необходимо будет повторно подтвердить подлинность имени входа, прежде чем вызывать его, поскольку Firebase требует новой проверки подлинности для выполнения определенных функций учетной записи, таких как удаление учетной записи, изменение адреса электронной почты или пароля.

Для проекта, в котором я только что реализовал это, я просто включил имя входа как часть формы смены пароля/электронной почты, а затем вызвал "signInWithEmailAndPassword" непосредственно перед вызовом "updateEmail".

Чтобы обновить пароль, просто сделайте следующее:

this.af.auth.currentUser.updatePassword(password)
.then(() => {
  ...
});

Ответ 3

Вы можете использовать следующее со всеми работами, такими как проверка и подтверждение по электронной почте.

Объявление переменных

// Widgets
private EditText etOldEmail, etNewEmail;
private Button btnChangeEmail;

// Firebase
private FirebaseAuth mAuth;
private FirebaseUser fbUser;

OnCreate

// Widgets
etOldEmail = findViewById(R.id.a_change_email_et_old_email);
etNewEmail = findViewById(R.id.a_change_email_et_new_email);
btnChangeEmail = findViewById(R.id.a_change_email_btn_change_email);

// Firebase
mAuth = FirebaseAuth.getInstance();
fbUser = mAuth.getCurrentUser();

Функция для изменения адреса электронной почты

private void changeEmailAddress() {

    String oldEmail = etOldEmail.getText().toString();
    String newEmail = etNewEmail.getText().toString();

    if (TextUtils.isEmpty(oldEmail)) {

        Toast.makeText(mContext, "Please Enter Your Old Email", Toast.LENGTH_SHORT).show();

    } else if (TextUtils.isEmpty(newEmail)) {

        Toast.makeText(mContext, "Please Enter Your New Email", Toast.LENGTH_SHORT).show();

    } else {

        String email = fbUser.getEmail();

        if (!oldEmail.equals(email)) {

            Toast.makeText(mContext, "Wrong Current Email, Please Check Again", Toast.LENGTH_SHORT).show();

        } else {

            fbUser.updateEmail(newEmail).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {

                    if (task.isSuccessful()) {

                        fbUser.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {

                                Toast.makeText(mContext, "Verification Email Sent To Your Email.. Please Verify and Login", Toast.LENGTH_LONG).show();

                                // Logout From Firebase
                                FirebaseGeneral firebaseGeneral = new FirebaseGeneral();
                                firebaseGeneral.logoutUser(mContext);

                            }
                        });

                    } else {

                        try {
                            throw Objects.requireNonNull(task.getException());
                        }

                        // Invalid Email
                        catch (FirebaseAuthInvalidCredentialsException malformedEmail) {
                            Toast.makeText(mContext, "Invalid Email...", Toast.LENGTH_LONG).show();

                        }
                        // Email Already Exists
                        catch (FirebaseAuthUserCollisionException existEmail) {
                            Toast.makeText(mContext, "Email Used By Someone Else, Please Give Another Email...", Toast.LENGTH_LONG).show();

                        }
                        // Any Other Exception
                        catch (Exception e) {
                            Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_LONG).show();

                        }
                    }

                }
            });

        }

    }

}