[英]Properly log out a user from android app
我正在開發一個小型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();
}
我覺得這會起作用嗎? 顯然,如果有人退出,他們應該無法點擊后退按鈕並神奇地返回到最后一頁而不重新登錄。
來自Firebase文檔
https://firebase.google.com/docs/auth/android/custom-auth
調用此FirebaseAuth.getInstance().signOut();
當Firebase對用戶進行身份驗證時(或者使用Firebase對用戶進行身份驗證),它會將該用戶的令牌存儲在設備的本地存儲中。 當您調用其中一個authWith...
方法時,會發生這種情況(當然,只有當它成功驗證用戶身份時)。
調用ref.unauth();
立即從本地存儲中刪除該令牌。
當用戶按下后退按鈕時,正確實現的流程不會自動重新驗證它們,但這取決於您實現的流程(您的問題中缺少這個流程,並且可能會有太多代碼)。
我在登出后看到后退按鈕的問題有2個選項:
在你的LoginActivity中,應該是你的啟動器活動,覆蓋onBackPressed方法並將其留空:
@Override
public void onBackPressed() {
// empty so nothing happens
}
或者/並且如果user == null,您可以在LogoutActivty中添加LoginActivityIntent。 這樣,每當未經過身份驗證的用戶登陸該活動時,它將立即重定向到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));
}
// ...
}
};
第一個選項更容易,但我想如果你在保存方面同時應用你的^^我現在編碼2周,所以如果我錯了,請糾正我。
你可以用finishAffinity();
替換finish()
finishAffinity();
刪除令牌和實例ID
String authorizedEntity = PROJECT_ID;
String scope = "GCM";
FirebaseInstanceID.getInstance(context).deleteToken(authorizedEntity,scope);
您還可以刪除實例ID本身,包括所有關聯的令牌。 下次調用getInstance()時,您將獲得一個新的實例ID:
FirebaseInstanceID.getInstance(context).deleteInstanceID();
String newIID = InstanceID.getInstance(context).getId();
private void sendToLogin() { //funtion
GoogleSignInClient mGoogleSignInClient ;
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleSignInClient = GoogleSignIn.getClient(getBaseContext(), gso);
mGoogleSignInClient.signOut().addOnCompleteListener(/*CURRENT CLASS */.this,
new OnCompleteListener<Void>() { //signout Google
@Override
public void onComplete(@NonNull Task<Void> task) {
FirebaseAuth.getInstance().signOut(); //signout firebase
Intent setupIntent = new Intent(getBaseContext(), /*To ur activity calss*/);
Toast.makeText(getBaseContext(), "Logged Out", Toast.LENGTH_LONG).show(); //if u want to show some text
setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(setupIntent);
finish();
}
});
}
這段代碼是作為副本編寫的,只是在代碼中讀取COMMENTS以根據您的需要自定義它,我更喜歡發送用戶登錄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.