Android FirebaseAuth调用signOut()后登出失效跳转异常问题
问题原因
登录状态判断逻辑错误是核心诱因:
FirebaseAuth.getInstance()返回的是Firebase认证模块的全局单例对象,无论当前是否有用户登录,这个方法都不会返回null- 现有LoginActivity里的判断条件
auth != null永远成立,因此无论是否执行登出操作,进入LoginActivity都会直接触发跳转PostActivity的逻辑,表现为登出功能失效。
修改方案
需要调整两处代码:
- 修正登录状态校验逻辑
不要判断FirebaseAuth实例本身是否为空,真正代表当前登录用户的是实例的currentUser属性,未登录状态下该属性会返回null。将LoginActivity中的校验代码替换为:
val auth = FirebaseAuth.getInstance() // 校验当前登录用户是否存在 if(auth.currentUser != null){ goPostsActivity() }
- 优化登出跳转逻辑,清理Activity栈
现有登出跳转逻辑没有清空任务栈,用户按返回键会直接回到登录后才允许访问的页面,容易触发权限错误或空指针。将ProfileActivity中的登出代码调整为:
override fun onOptionsItemSelected(item: MenuItem): Boolean { if(item.itemId == R.id.menu_logout){ Log.i(TAG,"user wants to logout") FirebaseAuth.getInstance().signOut() val intent = Intent(this, LoginActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK } startActivity(intent) finish() } return super.onOptionsItemSelected(item) }
修改完成后,执行signOut()方法会将currentUser置为null,进入LoginActivity时不会再自动跳转PostActivity,可正常输入其他账号完成登录。
内容的提问来源于stack exchange,提问作者ubfl
相关产品推荐
相关产品推荐

