簡體   English   中英

從Android應用程序正確注銷用戶

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM