【发布时间】:2022-11-25 17:01:58
【问题描述】:
我有可能让用户选择是否要使用 Google、Facebook、电子邮件/密码等登录。
测试我的应用程序后,发生了以下情况:
- 我用我的名字、电子邮件和密码注册
- 处理入门逻辑
- 在 Firebase 上验证我的授权用户(灰色电子邮件图标)
- 退出账户
- 现在,我想使用 Google 登录(与注册时使用的电子邮件和密码相同的电子邮件)
- Google 登录有效
- 在 Firebase 上验证我的授权用户(灰色电子邮件图标变为 Google 图标)
- 退出账户
- 无法再使用电子邮件和密码登录,但谷歌登录有效
经过一些研究,我得到了Link Multiple Auth Providers to an Account on Android documentation
我意识到我必须重构我的代码才能不使用 Firebase Auth.sign In With 方法
除了我的 loginEmailAndPassword 之外还有一点:
val credential = EmailAuthProvider.getCredential(email, password) firebaseAuth.currentUser!!.linkWithCredential(credential).addOnCompleteListener{ authTask: Task<AuthResult> -> if (authTask.isSuccessful) {我有一个“其他”意味着 (authTask.isSuccessful) 没有发生,另一个“如果”与 FirebaseAuthUserCollisionException
val exception: java.lang.Exception? = authTask.exception if (exception is FirebaseAuthUserCollisionException) { linkAndMerge(credential)我的目标是链接和合并,我不知道如何链接帐户(灰色电子邮件和 Firebase 上的 Google)
private fun linkAndMerge(credential: AuthCredential) { val authenticatedUserMutableLiveData: MutableLiveData<ResponseState<UserModel>> = MutableLiveData() val prevUser = firebaseAuth.currentUser firebaseAuth.signInWithCredential(credential) .addOnSuccessListener { result -> val currentUser = result.user // Merge prevUser and currentUser accounts and data // ... } .addOnFailureListener { authenticatedUserMutableLiveData.value = ResponseState.Error("Error") } }我的问题:
- 我可以调用一些东西来合并 prevUser 和 currentUser 帐户吗?我只想让用户有可能使用不同的身份验证。
- 我不担心数据,因为如果它是相同的用户 UID,则身份验证提供程序无关紧要
- 我还能使用“createUserWithEmailAndPassword”吗?
【问题讨论】:
标签: android firebase kotlin google-cloud-platform firebase-authentication