繁体   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