2016-02-21 2 views
13

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

Итак, у меня есть вход в систему, и он аутентифицирует пользователей как следует, и я выхожу из работы в том смысле, что он 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(); 
}   

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

+0

Эй, каков тип ссылки в коде? –

+0

Это 'Firebase', https://firebase.google.com. Они упрощают настройку быстрой базы данных и аутентификации и т. Д. – John

+1

Фактически я использовал FireBaseAuth для аутентификации пользователей в android и нашел способ завершить сеанс пользователя. Похоже, что у них уже есть метод для этого, вызовите signOut() в объекте FireBaseAuth. Во всяком случае, спасибо за ваше объяснение. –

ответ

11

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

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

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

+0

Хорошо! Спасибо за разъяснение – John

+1

Я использовал 'AuthUI.getInstance() .createSignInIntentBuilder()' для входа в мое приложение с использованием учетных записей Google, электронной почты. В этом случае, какая логика будет работать? Я видел ваш ответ выше. Здесь 'ref' представляет что? Можете ли вы решить мою проблему. Пожалуйста, см. Эту статью [post] (http://stackoverflow.com/questions/43959857/not-able-to-get-the-array-values-from-firebase-database) – Chip

+0

То же самое и здесь, я использую 'signInWithCredential' так что такое 'ref'? – cutiko

0

Удаление маркеров и Instance идентификаторы

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

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

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

Я вижу 2 варианта вопроса мы имеем с задней кнопки после выхода:

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

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

Или/и вы можете добавить LoginActivityIntent в вашем LogoutActivty, если пользователь == 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 недель, так Поправьте меня, если им неправильно.

Смежные вопросы