Как запретить пользователю возвращаться на защищенную страницу после выхода из системы - PullRequest
0 голосов
/ 02 июня 2018

Я хочу, чтобы пользователь не имел доступа к MainActivity (HomePage) без входа в систему.Для этого, когда пользователь открывает приложение, MainActivity проверяется, если пользователь не авторизован, то он переходит на LoginActivity через Intent.

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

Но возникает 2 проблемы:

  • После того, как приложение переместит пользователя в LoginActivity, нажав кнопку «Назад», пользователь сможет просматривать домашнюю страницу без входа в систему.
  • И после выхода из системы пользователь перейдет на страницу входа, но, нажав кнопку «Назад», пользователь сможет перейти на главную страницу.Стр.

Пожалуйста, помогите мне решить эту проблему.

MainActivity:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mAuth = FirebaseAuth.getInstance();
    mAuth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user == null){

                Intent intent = new Intent(MainActivity.this, LoginActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
            }
        }
    });

    mDataRef = FirebaseDatabase.getInstance().getReference().child("BlogApp").child("Posts");
    mBlogList = findViewById(R.id.blogListId);
    mBlogList.setLayoutManager(new LinearLayoutManager(this));
    adapterSetUp();
    mBlogList.setAdapter(adapter); // load blog posts

}

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

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

0 голосов
/ 03 июня 2018

Используйте метод finishAffinity(), который завершит текущее действие и все родительские действия.Но это работает только для API 16+.

Intent intent = new Intent(MainActivity.this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finishAffinity();

, вызова finishAffinity() метода после startActivity.

0 голосов
/ 02 июня 2018

вызов finish() метод после startActivity вот так:

Intent intent = new Intent(MainActivity.this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
...