Firebase: пользователь должен быть проверен каждый раз, когда он запускает приложение - PullRequest
0 голосов
/ 26 апреля 2020

Я работаю над приложением android, где в настоящее время я пытаюсь реализовать функцию аутентификации с использованием Firebase.

Функциональные возможности работают должным образом, пользователь может войти в систему обоими способами, которые я ожидаю, но каждый раз, когда он открывает программу, ему приходится go через процедуру аутентификации. Кроме того, после нажатия кнопки выхода из системы, система также немедленно выдает google-подтверждение. (после избежания этого мы, наконец, снова попадаем в меню с входом в систему, но это очень раздражает)

public class FragmentMain extends Fragment {

private static final int MY_REQUEST_CODE = 7117;
List<AuthUI.IdpConfig> providers;
Button logout;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.main_fragment, container, false);

    logout = v.findViewById(R.id.logout);
    logout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AuthUI.getInstance()
                    .signOut(getActivity())
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            logout.setEnabled(false);
                            showSignOptions();
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(getActivity(), "" + e.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
        }
    });

    providers = Arrays.asList(
        new AuthUI.IdpConfig.EmailBuilder().build(),
        new AuthUI.IdpConfig.GoogleBuilder().build()    
    );

    showSignOptions(); 
    return v;
}

private void showSignOptions() {
    startActivityForResult(
            AuthUI.getInstance().createSignInIntentBuilder()
                    .setAvailableProviders(providers)
                    .setLogo(R.drawable.loginlogo)
                    .setTheme(R.style.LogInTheme)
                    .build(), MY_REQUEST_CODE
    );
}

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == MY_REQUEST_CODE)
    {
        IdpResponse response = IdpResponse.fromResultIntent(data);
        if(resultCode == RESULT_OK)
        {
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

            Toast.makeText(getActivity(), "" + user.getEmail(), Toast.LENGTH_SHORT).show();
            logout.setEnabled(true);
        }else{
            Toast.makeText(getActivity(), "" + response.getError().getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
}
}

На мой взгляд, FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser() должна быть линией, вызывающей проблему, но не уверен, как ее решить (я имею в виду, конечно, если это проблема ...)

Есть ли способ заблокировать систему для запроса подтверждения, если пользователь один раз вошел в систему, до тех пор, пока это выходит из системы? - также, когда он выйдет из системы, вернитесь к цели входа в систему?

1 Ответ

2 голосов
/ 26 апреля 2020

вы можете попробовать это; в методе onStart() в вашей активности запуска вы можете проверить, вошел ли пользователь в систему или нет. Вы можете сделать что-то подобное

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // User is signed in, go to home activity/fragment.
} else {
    // No user is signed in, go to signin acitvity/fragment.
}

...