Android FirebaseAuth.getCurrentUser()永不空

Rya*_*yan 6 android firebase firebase-authentication

我有一个DispatchActivity作为我的Launcher Activity,用于检查当前是否有用户登录.如果用户已登录,我将它们发送到他们的ProfileActivity.否则,我将它们发送到LogInActivity.这是我在DispatchActivity中的代码:

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

    //.....................

    auth = FirebaseAuth.getInstance();

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

@Override
public void onStart() {
    super.onStart();
    auth.addAuthStateListener(authListener);
}

@Override
public void onStop() {
    super.onStop();
    if (authListener != null) {
       auth.removeAuthStateListener(authListener);
    }
}
Run Code Online (Sandbox Code Playgroud)

无论我做什么,firebaseAuth.getCurrentUser(),永远不会在我的主要测试设备上返回null.根据文档,getCurrentUser()将为null,除非有一个用户当前登录.当我记录这个用户的一些细节时,它们与我之前创建的"测试"用户一致,(即调用user.getEmail()返回"email@example.com".

这是有问题的,因为我肯定在我的控制台的用户数据库(在身份验证/用户中)中没有任何用户.我不久前从数据库中删除了这个测试用户,数据库是空的.

我尝试在另一台设备上运行App,并且它正确执行.但是,在我的主要测试设备上执行全新安装不能解决问题.

问题: 据我所知,问题与我的设备的某种持久用户状态有关; 因为运行不同的设备工作正常.由于我没有故意将此配置发生,我想知道是什么导致我的Auth用户数据库和设备之间的这种不一致.

如果数据库为空,auth.getCurrentUser()从哪里获取此先前删除的用户对象?

谢谢.

Dou*_*son 4

Firebase 身份验证将在用户登录时缓存用户身份验证令牌。这可以避免必须对用户与 Firebase 提供的其他服务进行的每一个小交互进行身份验证。该令牌会定期自动刷新,但在此之前,SDK 假定该令牌代表用户。您会发现令牌会在一段时间后过期,或者您可以通过卸载并重新安装应用程序或清除其数据来强制解决此问题。

无论实时数据库的内容如何,​​身份验证都会有效。它们彼此独立,除非安全规则限制对当前经过身份验证的用户的访问。

  • 我可以在生产应用程序中做些什么吗?“某个时间”是多少?谢谢 (2认同)