Android Studio:我始终登录,尽管我的Firebase中没有用户,但我使用功能进行了检查。为什么?

时间:2019-01-24 03:07:44

标签: java android firebase firebase-authentication

我编写了一个代码,用于检查用户是否已经存在,并且他不会再次登录(这很烦人)。我将此代码添加到我的LoginActivity中,因为如果它已经注册并登录,则随后必须跳入AppStartActivity(登录或注册后的活动)。但是,我从Firebase数据库中删除了用户,并在启动时再次在模拟器上运行app时,尽管数据库中不存在任何帐户,但我仍处于AppStartActivity中,因为已将其删除。为什么会这样?

我检查用户是否存在:

mAuthStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

                FirebaseUser user = firebaseAuth.getCurrentUser();

                if (user != null) {
                    Intent switchToAppStartActivity = new Intent(getApplicationContext(), AppStartActivity.class);
                    startActivity(switchToAppStartActivity);
                }
            }
        };

但是我删除了Firebase中的所有用户,但是当我在模拟器上启动应用程序时,我仍然在登录或注册后切换到“活动”。为什么?

这是整个代码:

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

public class LoginActivity extends AppCompatActivity {

    EditText emailLogin;
    EditText passwordLogin;

    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthStateListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        emailLogin = (EditText) findViewById(R.id.emailLogin);
        passwordLogin = (EditText) findViewById(R.id.passwordLogin);

        mAuthStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

                FirebaseUser user = firebaseAuth.getCurrentUser();

                if (user != null) {
                    Intent switchToAppStartActivity = new Intent(getApplicationContext(), AppStartActivity.class);
                    startActivity(switchToAppStartActivity);
                }
            }
        };

    }

        public void setupNewAccount (View view){
        Intent registrationActivity = new Intent(getApplicationContext(), EmailSignUpActivity.class);
        startActivity(registrationActivity);

    }
}

1 个答案:

答案 0 :(得分:0)

Firebase身份验证使用ID令牌,这些令牌在铸造后的一个小时内有效。这样可以避免在每次调用时都需要重新验证令牌,并大大提高了性能。但这确实意味着用户保持登录状态是正常的,直到需要刷新其ID令牌为止。

如果需要将用户锁定在应用程序之外,则可能应该实施黑名单机制,将其UID存储在已知的不良用户列表中。这也防止他们简单地重新注册以重新获得访问权限。

另请参阅: