我有一个dispatchActivity作为启动器活动,它用于检查当前是否有用户登录.如果该用户已登录,则将其发送到他们的ProfileActivity.否则,我将它们发送到LogInActivity.这是我在dispatchActivity中的代码:
@OverrIDeprotected 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(); } } };}@OverrIDepublic voID onStart() { super.onStart(); auth.addAuthStateListener(authListener);}@OverrIDepublic voID onStop() { super.onStop(); if (authListener != null) { auth.removeAuthStateListener(authListener); }}
无论我做什么,firebaseAuth.getCurrentUser()都不会在我的主要测试设备上返回null.根据文档,除非当前有一个用户登录,否则getCurrentUser()将为null.当我记录该用户的某些详细信息时,它们与我之前创建的“测试”用户一致(即,调用user.getEmail()返回“ [email protected]”.
这是有问题的,因为我最肯定在控制台的用户数据库(在Authentication / Users中)没有任何用户.我前一段时间从数据库中删除了该测试用户,并且数据库为空.
我尝试在另一台设备上运行该应用程序,并且该应用程序正常运行.但是,在我的主要测试设备上执行全新安装并不能解决问题.
题:
据我所知,该问题与设备的某种持久用户状态有关.因为运行其他设备可以正常工作.由于我没有故意配置这种情况的发生,因此我想知道是什么导致我的Auth用户数据库和设备之间的这种不一致.
如果数据库为空,auth.getCurrentUser()从何处获取此先前删除的用户对象?
谢谢.
解决方法:
Firebase身份验证将在用户登录时为用户缓存身份验证令牌.这样可以避免对用户与Firebase提供的其他服务进行的每次交互进行身份验证的方式.该令牌会定期自动刷新,但在此之前,SDK会假定该令牌代表用户.您会发现令牌将在一段时间后过期,或者您可以通过卸载和重新安装该应用程序或清除其数据来强制该问题.
无论实时数据库的内容如何,身份验证均有效.它们彼此独立,除非安全规则将访问权限限制为当前经过身份验证的用户.
总结以上是内存溢出为你收集整理的Android FirebaseAuth.getCurrentUser()永不为空全部内容,希望文章能够帮你解决Android FirebaseAuth.getCurrentUser()永不为空所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)