Подтвердить что ты не робот

Правильно выйти из приложения Android

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

Итак, у меня есть вход в систему, и он аутентифицирует пользователей так, как должен, и я выхожу из работы в том смысле, что он unauthenticates пользователей. Но есть ли что-нибудь, что я должен сделать из приложения, чтобы убить сессию?

if (id == R.id.action_log_out) {
    ref.unauth(); //End user session
    startActivity(new Intent(MainActivity.this, LoginActivity.class)); //Go back to home page
    finish();
}        

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

4b9b3361

Ответ 1

Когда Firebase аутентифицирует пользователя (или вы аутентифицируете пользователя с помощью Firebase), он сохраняет токен для этого пользователя в локальном хранилище на вашем устройстве. Это происходит, когда вы вызываете один из методов authWith... (конечно, только если он успешно аутентифицирует пользователя).

Вызов ref.unauth(); немедленно удаляет этот токен из локального хранилища.

Правильно реализованный поток не будет автоматически повторно аутентифицировать их, когда пользователь нажимает кнопку "Назад", но это зависит от потока, который вы реализуете (который отсутствует в вашем вопросе и, скорее всего, слишком много кода).

Ответ 3

Я вижу 2 варианта проблемы, которые у нас есть с помощью кнопки "Назад" после выхода из системы:

В вашей учетной записи LoginActivity, которая должна быть вашей деятельностью для запуска, переопределите метод onBackPressed и оставьте его пустым:

    @Override
public void onBackPressed() {
// empty so nothing happens
}

Или/и вы можете добавить LoginActivityIntent в свой LogoutActivty, если user == null. Таким образом, всякий раз, когда пользователь, не прошедший аутентификацию, приземляется на активность, он мгновенно перенаправляется на LoginActivity, хотя это выглядит странно.

        mAuth = FirebaseAuth.getInstance();
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                // User is signed in
                Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
            } else {
                // User is signed out
                Log.d(TAG,"onAuthStateChanged:signed_out");
                startActivity(new Intent(LogoutActivity.this, LoginActivity.class));
            }
            // ...
        }
    };

Первый вариант проще, но я предполагаю, что если вы примените оба на стороне сохранения ^^ Im кодирования в течение 2 недель, так исправьте меня, если я ошибаюсь.

Ответ 4

Удалить маркеры и идентификаторы экземпляров

String authorizedEntity = PROJECT_ID;  
String scope = "GCM";
FirebaseInstanceID.getInstance(context).deleteToken(authorizedEntity,scope);

Вы также можете удалить сам экземпляр экземпляра, включая все связанные токены. При следующем вызове getInstance() вы получите новый идентификатор экземпляра:

FirebaseInstanceID.getInstance(context).deleteInstanceID();
String newIID = InstanceID.getInstance(context).getId();