从Android应用程序正确注销用户

Joh*_*ohn 23 android firebase firebase-authentication

我正在开发一个小型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();
}        
Run Code Online (Sandbox Code Playgroud)

我觉得这会起作用吗?显然,如果有人退出,他们应该无法点击后退按钮并神奇地返回到最后一页而不重新登录.

Man*_*umi 26

来自Firebase文档

https://firebase.google.com/docs/auth/android/custom-auth

叫这个 FirebaseAuth.getInstance().signOut();


Fra*_*len 13

当Firebase对用户进行身份验证时(或者使用Firebase对用户进行身份验证),它会将该用户的令牌存储在设备的本地存储中.当您调用其中一个authWith...方法时(当然只有成功验证用户身份)才会发生这种情况.

调用会ref.unauth();立即从本地存储中删除该令牌.

当用户按下后退按钮时,正确实现的流程不会自动重新验证它们,但这取决于您实现的流程(您的问题中缺少这个流程,并且可能会有太多代码).

  • 此答案基于Firebase 2.x,从2016年5月之前开始.在以后的版本中,等效的是`FirebaseAuth.getInstance().signOut();` (4认同)

Dan*_*Szy 6

注销后,对于后退按钮,我看到2个选项:

在LoginActivity中,启动程序活动应为Override onBackPressed方法,并将其保留为空:

    @Override
public void onBackPressed() {
// empty so nothing happens
}
Run Code Online (Sandbox Code Playgroud)

或者/并且如果用户== 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));
            }
            // ...
        }
    };
Run Code Online (Sandbox Code Playgroud)

First Option比较容易,但是我想您是否同时在保存方面都应用^^我现在编码了2周,所以如果我输入错误,请更正我。