我有一个 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);
}
}
无论我做什么,firebaseAuth.getCurrentUser() 在我的主要测试设备上都不会返回 null。根据文档,除非当前有用户登录,否则 getCurrentUser() 将为 null。当我记录该用户的一些详细信息时,它们与我之前创建的“测试”用户一致(即调用 user.getEmail()返回“[电子邮件受保护]".
这是有问题的,因为我最肯定的是我的控制台的用户数据库中没有任何用户(在身份验证/用户中)。我前段时间从数据库中删除了这个test User,数据库is empty.
我尝试在另一台设备上运行该应用程序,并且它执行正常。但是,在我的主要测试设备上执行全新安装does not解决问题。
问题:据我所知,该问题与我的设备的某种持久用户状态有关;因为运行不同的设备工作正常。由于我没有故意配置这种情况发生,我想知道是什么导致我的身份验证用户数据库和设备之间出现这种不一致。
如果数据库为空,那么 auth.getCurrentUser() 从哪里获取之前删除的用户对象?
谢谢。
Firebase 身份验证将在用户登录时缓存用户身份验证令牌。这可以避免必须对用户与 Firebase 提供的其他服务进行的每一个小交互进行身份验证。该令牌会定期自动刷新,但在此之前,SDK 假定该令牌代表用户。您会发现令牌会在一段时间后过期,或者您可以通过卸载并重新安装应用程序或清除其数据来强制解决此问题。
无论实时数据库的内容如何,身份验证都会有效。它们彼此独立,除非安全规则限制对当前经过身份验证的用户的访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)