获取当前用户的Firebase Auth doc's recommended way是:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
// User is signed in
} else {
// No user is signed in
}
所以我在第一次活动开始时就开始做了这个:
override fun onCreate(savedInstanceState: Bundle?) {
Log.d(TAG, "⟳ onCreate")
super.onCreate(savedInstanceState)
if (FirebaseAuth.getInstance().currentUser == null) {
Log.d(TAG, "User is null. Sending user to log in.")
val intent = Intent(this, FacebookLoginActivity::class.java)
startActivity(intent)
finish()
} else {
Log.d(TAG, "User has been found. Launching MainActivity")
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
finish()
}
}
但这是奇怪的事情开始发生的时候
步骤:
卸载&再次安装然后启动
实际:FirebaseAuth.getInstance().currentUser
不为空!好吧,猜测Firebase库正在尝试做一些聪明的事情并弄清楚我以前的登录历史,但是:
我检查了几件事:
FirebaseAuth.getInstance().currentUser.providerData
显示这个uid与我的Facebook帐户相关联,所以我
必须先用它登录。 (我在下一个活动中打电话给FacebookAuthProvider.getCredential(...)
)但我真正的合法也应该与我感兴趣的Facebook帐户相关联。
FirebaseAuth.getInstance()。currentUser.isAnonymous返回false,所以 问题可能与匿名登录
我如何清除这个"幻像"来自系统的流氓用户ID?
我该如何检查?每次用户打开应用时,我都不想致电FacebookAuthProvider.getCredential(...)
。
(使用' firebase-auth:12.0.1')
答案 0 :(得分:1)
如果您的用户与您的应用分开,并且您决定从Firebase Console删除其帐户,则需要知道如果相同的用户再次使用您的应用,则另一个{{1生成,这显然与第一个不同。因此,即使该用户在删除之前具有相同的详细信息(userName,emailAddress等),也会被视为具有uid
的新用户。
答案 1 :(得分:0)
我遇到了与您相同的问题。我正在Android设备上使用Flutter。 这是我尝试过的:
然后,FirebaseAuth.getInstance().getCurrentUser()
将不再保存该值。
例如,在我的应用程序中,我使用firestore,由于无效的userId(取决于安全规则),在访问firestore资源时会抛出权限错误。您可以使您的应用程序具有防御性,以要求用户再次登录。或者您可以执行firebaseUser.reload()
,它将引发userId无效异常。
FirebaseAuth.getInstance().getCurrentUser()
将在重启前保留该值的实际原因仍然未知。