【问题标题】:How to stop firebase logout on back button? [duplicate]如何在后退按钮上停止 firebase 注销? [复制]
【发布时间】:2021-10-22 16:38:36
【问题描述】:

在你从 stackoverflow 中删除我的问题之前,请听我说完。 我知道这个问题很常见,但我尝试过的都没有帮助我。我已经在 stackoverflow 和其他网站上看到了可用的解决方案,但它们并没有解决我的问题。 所以即使你选择从这个论坛中删除我的问题,请先帮我解决我的问题,至少给我发邮件。

        button1.setOnClickListener(view -> {
            login();
        });
        
       }
    public void login() {

        Intent intent = new Intent(this, IndexActivity.class);
        String mail = et1.getText().toString();
        String password = et2.getText().toString();

        if (mail.isEmpty()) {
            error.setText(e1);
        } else if (password.isEmpty()) {
            error.setText(e2);
        } else if (password.length() < 6) {
            error.setText("Invalid Password Length!!");
            et2.setError("Password length must be at least 6!!");
        } else {
            mAuth.signInWithEmailAndPassword(mail, password).addOnCompleteListener(task -> {
                if (task.isSuccessful()) {
                    Toast.makeText(MainActivity.this, "Welcome Back",Toast.LENGTH_LONG).show();
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intent);
                    error.setText("");
                    et1.setText("");
                    et2.setText("");
                }
                else {
                    Toast.makeText(MainActivity.this, " "+ Objects.requireNonNull(task.getException()).getMessage(),Toast.LENGTH_LONG).show();
                    error.setText(e3);
                }
            });
        }

        if (error.getText().toString().isEmpty()) {

            error.setVisibility(View.INVISIBLE);
        } else {
            error.setVisibility(View.VISIBLE);
        }
    }
    
}

以上是我的登录页面

下面是我的孩子活动

logout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mAuth.getCurrentUser() != null) {
                    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                    mAuth.signOut();
                    startActivity(intent);
                    finish();
                }
                else {
                    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                    startActivity(intent);
                }
            }
        });

我已经尝试了互联网上的所有内容。 sharedPreferences、onBackPressed 覆盖、onSaveInstanceState、onRestoreInstanceState、onStart 和 onResume 覆盖,但我不知道具体要使用什么。

【问题讨论】:

  • 请编辑您的问题以包含您遇到的确切问题,以及问题来自代码的何处?例如:如果您在调试器中逐行执行此代码,那么第一行没有按照您的预期执行?
  • 您好,先生!我分享了完整的代码是有原因的,因为我不知道代码在哪里需要额外的行。如果用户之前已登录但尚未注销,我希望将用户直接发送到我的 IndexActivity。我有一个单独的按钮。如果用户选择注销,则在下次打开应用程序时打开 MainActivity。

标签: java android firebase-authentication


【解决方案1】:

检查用户是否已经登录

if (auth.getCurrentUser() != null)
   //user logged in already, do your work here for logged in user
else
   //user is not logged in, let user login 

【讨论】:

  • 我可以在我的登录页面上查看吗?因为我的个人资料活动中已经有那段代码。
  • 是的......你可以......你应该在登录表单出现之前检查用户是否已经登录
【解决方案2】:

后退按钮很可能不会将用户注销,而是 UI 元素没有更新用户信息。 如果您怀疑用户正在注销,这将是一次身份验证刷新,如果您已注册,这将触发onAuthStateChanged() 事件。

否则,使用 auth().currentUser 检查当前用户的当前身份验证应该产生 null 或用户对象

获取当前用户

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // User is signed in
} else {
    // No user is signed in
}

身份验证状态监听器

mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    // User is signed in
                } else {
                    // User is signed out
                    }

                    Log.d("LOG_Login", "onAuthStateChanged:signed_out");
                }
            }
        };

        mAuth.addAuthStateListener(mAuthListener);

【讨论】:

    猜你喜欢
    • 2015-03-12
    • 1970-01-01
    • 2020-10-19
    • 2017-02-23
    • 2012-05-12
    • 2011-08-05
    • 2015-09-28
    • 2012-07-09
    • 2012-11-03
    相关资源
    最近更新 更多