gpt4 book ai didi

Android FirebaseAuth.getCurrentUser() 从不为空

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:08:15 24 4
gpt4 key购买 nike

我有一个 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() 将为空。当我记录该用户的一些详细信息时,它们与我之前创建的“测试”用户一致,(即调用 user.getEmail()返回“email@example.com”。

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

我尝试在另一台设备上运行该应用程序,它运行正常。但是,在我的主要测试设备上执行全新安装没有解决问题。

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

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

谢谢。

最佳答案

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

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

关于Android FirebaseAuth.getCurrentUser() 从不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41797358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com