Сбой аутентификации Firebase при попытке повторной аутентификации для обновления электронной почты и пароля - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь повторно подтвердить подлинность пользователя перед тем, как редактировать электронную почту и пароль этого пользователя для нового требуемого адреса электронной почты и пароля, но повторная проверка подлинности всегда возвращается как «Ошибка проверки подлинности».


Myтекущий код:

databaseUser = FirebaseDatabase.getInstance().getReference("USERS");
                final DatabaseReference mDatabase = databaseUser;

                mDatabase.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull final DataSnapshot dataSnapshot2) {

                        for(final DataSnapshot snapshot : dataSnapshot2.getChildren()) {
                            if (snapshot.child("Username").getValue(String.class).equals(username.getText().toString())){
                                editkey = snapshot.getKey().toString();

                                emailHolder.setText(dataSnapshot2.child(editkey).child("User_Email_Address").getValue(String.class));
                                passHolder.setText(dataSnapshot2.child(editkey).child("User_Password").getValue(String.class));

                                editUsername.setText(dataSnapshot2.child(editkey).child("Username").getValue(String.class));
                                editUserEmail.setText(dataSnapshot2.child(editkey).child("User_Email_Address").getValue(String.class));
                                editUserContactNum.setText(dataSnapshot2.child(editkey).child("User_Contact_Number").getValue(String.class));
                                editUserPass.setText(dataSnapshot2.child(editkey).child("User_Password").getValue(String.class));

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

                                        AlertDialog.Builder builder = new AlertDialog.Builder(UserMaintenance.this);
                                        builder.setTitle("Confirm Edit");
                                        builder.setMessage("Finalize changes?");
                                        builder.setCancelable(false);
                                        builder.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
                                            @Override
                                            public void onClick(DialogInterface dialog, int which) {
                                                String username = editUsername.getText().toString();
                                                String emailID = editUserEmail.getText().toString();
                                                String contactNum = editUserContactNum.getText().toString();
                                                String paswd = editUserPass.getText().toString();

                                                if (TextUtils.isEmpty(username) || TextUtils.isEmpty(emailID) || TextUtils.isEmpty(contactNum) || TextUtils.isEmpty(paswd)) {
                                                    Toast.makeText(getApplicationContext(), "Please fill in all fields.", Toast.LENGTH_LONG).show();

                                                } else {

                                                    userEdit = FirebaseAuth.getInstance().getCurrentUser();

                                                    AuthCredential credential2 = EmailAuthProvider
                                                            .getCredential(emailHolder.getText().toString(), passHolder.getText().toString());

                                                    userEdit.reauthenticate(credential2)
                                                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                                @Override
                                                                public void onComplete(@NonNull Task<Void> task) {
                                                                    if (task.isSuccessful()) {
                                                                        Log.e("TAG", "onComplete: authentication complete");

                                                                        userEdit.updatePassword(editUserPass.getText().toString())
                                                                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                                                    @Override
                                                                                    public void onComplete(@NonNull Task<Void> task) {
                                                                                        if (task.isSuccessful()) {
                                                                                            Log.e("TAG", "User password updated.");

                                                                                            userEdit.updateEmail(editUserEmail.getText().toString())
                                                                                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                                                                        @Override
                                                                                                        public void onComplete(@NonNull Task<Void> task) {
                                                                                                            if (task.isSuccessful()) {
                                                                                                                Log.e("TAG", "User email updated.");



                                                                                                                btnConfirmEdit.setVisibility(View.GONE);
                                                                                                                lblEdit.setVisibility(View.GONE);
                                                                                                                btnBack2.setVisibility(View.GONE);
                                                                                                                editToolbar.setVisibility(View.GONE);
                                                                                                                editElements.setVisibility(View.GONE);

                                                                                                                return;
                                                                                                            }
                                                                                                        }
                                                                                                    });
                                                                                        }
                                                                                    }
                                                                                });


                                                                    } else {
                                                                        Toast.makeText(UserMaintenance.this, "Authentication failed",
                                                                                Toast.LENGTH_SHORT).show();
                                                                    }
                                                                }
                                                            });


                                                }
                                            }
                                        });

                                        builder.setPositiveButton("No", new DialogInterface.OnClickListener() {
                                            @Override
                                            public void onClick(DialogInterface dialog, int which) {

                                            }
                                        });
                                        builder.show();
                                    }
                                });
                            }
                        }

                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                    }
                });

Все электронные письма моего пользователя имеют правильный формат (example@domain.com) и пароль из 6+ символов.Я проверил, что учетные данные находятся прямо перед повторной аутентификацией, но все же не повезло.

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

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