Неоднозначное поведение метода signInWithEmailAndPassword

У меня есть активность, а именно EmailSignUpActivity, откуда я создаю пользователя, используя метод createUserWithEmailAndPassword из Firebase. После создания пользователя я перенаправляю его в Основная деятельность, где присутствует метод signOut. После выхода я перенаправляю пользователя в Войти, где присутствует опция входа по электронной почте и паролю, и подписываю пользователя с помощью метода signInWithEmailAndPassword.

Моя проблема в том, что после создания пользователя в первый раз я выхожу из системы и снова сразу же регистрирую пользователя в Войти, но ни один из моих тегов журнала, которые записаны внутри signInWithEmailAndPassword, не работают, и диалоговое окно прогресса не закрывается, что является записано внутри signInWithEmailAndPassword, что показывает, что этот метод не вызывается. Но когда я очищаю свое приложение из памяти телефона и снова открываю его, открывается Основная деятельность, который должен был открыться после успешного войти.

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

Может ли кто-нибудь объяснить причину такого неоднозначного поведения?

В EmailSignUpActivityсоздание пользователя

 mAuth.createUserWithEmailAndPassword(email, password).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                        @Override
                        public void onSuccess(AuthResult authResult) {
                            progressDialog.dismiss();

                            Log.d(TAG, "onSuccess: new user created");
                            Toast.makeText(EmailSignUpActivity.this, "User created", Toast.LENGTH_SHORT).show();
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            progressDialog.dismiss();

                            Log.w(TAG, "onFailure: user creation failed  ", e);
                            Toast.makeText(EmailSignUpActivity.this, "User already exist", Toast.LENGTH_SHORT).show();
                        }
                    });

В Войтивход в систему

private void emailAndPasswordLogin() {

    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d(TAG, "onClick:");

            progressDialog.show();

            String email = emailEditText.getText().toString();
            String password = passwordEditText.getText().toString();

            if (!email.equals("null") && !password.equals("null")) {

                Log.d(TAG, "onClick: mAuth ==> "+mAuth);

                mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        Log.d(TAG, "onComplete:");

                        if (task.isSuccessful()){
                            Log.d(TAG, "onComplete: if task successful");

                            progressDialog.dismiss();

                            Log.d(TAG, "onSuccess: login success ");

                            Boolean newUser = task.getResult().getAdditionalUserInfo().isNewUser();

                            Log.d(TAG, "LoginButton == onSuccess: newUser ==> "+newUser);

                            if (newUser){

                                //
                                boolean hasImage = false;
                                enteringDataIntoUserNode(hasImage);

                                //
                                Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                                startActivity(intent);


                            }else{
                                Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                                startActivity(intent);
                            }
                        }else{
                            progressDialog.dismiss();

                            Log.w(TAG, "onFailure: login failure ", task.getException());

                            Toast.makeText(LoginActivity.this, "Email or Password invalid.", Toast.LENGTH_SHORT).show();
                        }
                    }
                });


            }
        }
    });
}

В Основная деятельностьвыход пользователя

 private void signOut() {

    //  getting the provider id
    String providerId = null;

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

    for (UserInfo profile : user.getProviderData()) {
        Log.d(TAG, "Provider: " + profile.getProviderId());

        providerId = profile.getProviderId();
    }

    if (providerId.equals("password")){
        Log.d(TAG, "signOut: inside password sign out");
        // firebase sign out

        firebaseAuth.signOut();

        Log.d(TAG, "signOut: currentUser ==> "+firebaseAuth.getCurrentUser());

        Intent intent = new Intent(MainActivity.this, LoginAndSignupActivity.class);
        startActivity(intent);
        finish();
    }
}
0
0
84
1

Ответы 1

Хорошо, попробуйте это, не инициализируйте поставщика, и когда вы хотите выйти, не получайте текущего пользователя, а вместо этого используйте this. ТОЛЬКО если вы используете пользовательский интерфейс firebase.

String providerId = profile.getProviderId();

FirebaseAuth.getInstance().signOut(this);

если вы используете Firebase Auth, возможно, попробуйте и Catch, чтобы увидеть, выходит ли ваша Firebase в первую очередь из системы, а не только переключает намерения. Я помню, что у меня была такая же проблема, и она касалась моего выхода из системы, может быть, примерно так:

FirebaseAuth mAuth = FirebaseAuth.getInstance();
try {
 mAuth.signOut();
 Toast.makeText(this, "User Sign out!", Toast.LENGTH_SHORT).show();
}catch (Exception e) {
 Log.e(TAG, "onClick: Exception "+e.getMessage(),e );
}
signOut() не принимает никаких аргументов, поэтому передача this невозможна.
Neeraj Sewani 25.07.2018 15:53

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

user9970916 25.07.2018 16:00

Другие вопросы по теме