Firebase Auth 返回一个神秘的不正确的 uid
Posted
技术标签:
【中文标题】Firebase Auth 返回一个神秘的不正确的 uid【英文标题】:Firebase Auth returns a mysterious incorrect uid 【发布时间】:2018-09-18 09:44:01 【问题描述】:获取当前用户的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(...)
)但是我的真实合法uid 也应该与我感兴趣的Facebook 帐户相关联。
FirebaseAuth.getInstance().currentUser.isAnonymous 返回 false,所以 问题可能与匿名登录无关
如何从系统中清除这个“幻影”流氓用户 ID?
我该如何检查?我不想每次用户打开应用时都调用FacebookAuthProvider.getCredential(...)
。
(使用 'firebase-auth:12.0.1')
【问题讨论】:
您是否还要从 Firebase 控制台中删除用户? @AlexMamo 是的,有时我会在测试时删除控制台上的用户。我不能确定我是否删除了这个用户。 【参考方案1】:我遇到了和你一样的问题。我在 android 设备上使用颤振。 这是我尝试过的:
-
清除应用的缓存。
删除应用程序。
重启手机。
重新安装应用。
然后,FirebaseAuth.getInstance().getCurrentUser()
将不再持有该值。
例如在我的应用程序中,我使用了firestore,由于无效的userId(它取决于安全规则),它在访问firestore 资源时会抛出权限错误。你可以让你的应用程序防御性地要求用户再次登录。或者你可以做firebaseUser.reload()
它会抛出userId无效异常。
FirebaseAuth.getInstance().getCurrentUser()
会在重启前保持该值的真正原因仍然未知。
【讨论】:
【参考方案2】:如果您的应用程序中有一个用户,并且您决定从Firebase Console 中删除其帐户,您需要知道,如果同样返回再次使用您的应用程序,则会生成另一个uid
,这显然与第一个不同。因此,即使该用户在被删除之前具有相同的详细信息(用户名、电子邮件地址等),也会被视为具有new uid
的新用户。
【讨论】:
这很清楚。在这种情况下,sdk 永远不应返回旧的“已删除”uid,而是“新 uid”。我在 Firebase 控制台上找不到 SDK 返回的 uid。在强制 SDK 将我的 Facebook 令牌交换为 Firebase uid 后,我得到了 Firebase 控制台上列出的正确 uid。 我明白了。你觉得我的回答对你有帮助吗? 我非常感谢您的回答,尽管它不是答案或导致我深入调查的东西。以上是关于Firebase Auth 返回一个神秘的不正确的 uid的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Auth ID 令牌的“aud”声明不正确
Firebase Auth 密码重置:如何正确发送包含确认码的密码重置电子邮件?
有时 firebase.auth().onAuthStateChanged 在我刷新页面时返回 null 用户