Android studio firbase сменить пароль подтвердите ошибку формы - PullRequest
0 голосов
/ 15 января 2020

Здравствуйте, я просто хочу сопоставить 2 поля, если они совпадают, я хочу отправить 1 из них в базу данных. это для смены пароля. Однако я получаю сообщение об ошибке, и оно сразу же приводит к выражению else: «Что-то пошло не так, пароль не изменился». не могу понять почему.

прямо сейчас, если 2 пароля не совпадают, я получаю сообщение: оба поля очень совпадают, эта часть верна

когда 2 совпадения, я получаю что-то не так: это утверждение else для publi c void oncomplete для пожарной базы. оно просто пропускается, если задача выполнена успешно, и я не понимаю, почему.

public void changePassword(){
   String userPasswordNew = newPassword.getText().toString(); // get pw
    String userPassword2New = newPassword2.getText().toString();

    if (userPasswordNew.equals(userPassword2New)){

        if(userPasswordNew.equals("") || userPassword2New.equals("")){
            Toast.makeText(ProfilePasswordUpdateActivity.this,"Fields can not be empty", Toast.LENGTH_SHORT).show();
        }

        else {
            firebaseUser.updatePassword(userPasswordNew).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if(task.isSuccessful()){
                        Toast.makeText(ProfilePasswordUpdateActivity.this,"Password changed",Toast.LENGTH_SHORT).show();
                        finish();
                    }else{
                        Toast.makeText(ProfilePasswordUpdateActivity.this,"Something went wrong, password did not get changed",Toast.LENGTH_LONG).show();
                    }
                }
            });
        }

    }
    else{
        Toast.makeText(ProfilePasswordUpdateActivity.this,"Both fields much match in order to change password",Toast.LENGTH_LONG).show();
    }

}

xml привязка для входных данных

 newPassword = findViewById(R.id.EditText_new_password);
 newPassword2 = findViewById(R.id.EditText_new_password2);

ошибка

2020-01 -15 08: 57: 44.007 11071-11071 / com.example.examapplikation E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.examapplikation, PID: 11071 java .lang.NullPointerException: попытка вызвать виртуальный метод com .google. android .gms.tasks.Task com.google.firebase.auth.FirebaseUser.reauthenticate (com.google.firebase.auth.AuthCredential) 'для ссылки на пустой объект в com.example.examapplikation.ProfilePasswordUpdateActivity.change (ProfilePasswordUpdateActivity. java: 66) в com.example.examapplikation.ProfilePasswordUpdateActivity $ 1.onClick (ProfilePasswordUpdateActivity. java: 50) в android .view.View.performClick (View. java: 6597) в android .view.View.performClickInternal (View. java: 6574) при android .view.View.access $ 3100 (View. java: 778) при android .view.View $ PerformClick.run ( Просмотр. java: 25885) в android .os.Handler.h andleCallback (обработчик. java: 873) в android .os.Handler.dispatchMessage (обработчик. java: 99) в android .os.Looper.l oop (Looper. java: 193 ) в android .app.ActivityThread.main (ActivityThread. java: 6669) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller .run (RuntimeInit. java: 493) на com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 858)

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Надеюсь, это поможет вам. поскольку SO ответ nilsi говорит, что вам необходимо повторно подтвердить подлинность пользователя, чтобы изменить пароль. Я внес изменения в ваш лог c, может это вам поможет. Просто повторите аутентификацию пользователя перед сменой пароля.

String userPasswordNew = newPassword.getText().toString();
String userPassword2New = newPassword2.getText().toString();

if(!userPasswordNew.equals("") && !userPassword2New.equals("")){
    if(userPasswordNew.equals(userPassword2New)){
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        AuthCredential credential = EmailAuthProvider
                .getCredential("user@example.com", "password1234");
        user.reauthenticate(credential)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            user.updatePassword(userPasswordNew).addOnCompleteListener(new OnCompleteListener<Void>() {
                                @Override
                                public void onComplete(@NonNull Task<Void> task) {
                                    if (task.isSuccessful()) {
                                        Log.d(TAG, "Password updated");
                                    } else {
                                        Log.d(TAG, "Error password not updated")
                                    }
                                }
                            });
                        } else {
                            Log.d(TAG, "Error auth failed")
                        }
                    }
                });
    }else{
        Log.d("Password", "Does Not Match");
    }
}else{
    Log.d("Password", "Fill the Edittext");
}
0 голосов
/ 15 января 2020

Для некоторых чувствительных к безопасности действий, таких как удаление учетной записи, установка основного адреса электронной почты и изменение пароля, требуется, чтобы пользователь недавно выполнил вход. Если вы выполните одно из этих действий, а пользователь выполнил вход слишком долго go, действие завершается с ошибкой. Когда это происходит, повторно аутентифицируйте пользователя, получив новые учетные данные от пользователя и передав их в reauthenticateWithCredential.

var user = firebase.auth().currentUser;
var credential;

// Prompt the user to re-provide their sign-in credentials

user.reauthenticateWithCredential(credential).then(function() {
  // User re-authenticated.
}).catch(function(error) {
  // An error happened.
});
...