我一直在我的应用中使用Firebase身份验证,并注意到特定用例的问题.
我已启用帐户链接我的应用的注册流程,因此我可以附加与单个电子邮件地址关联的多个提供商.
场景1 :(工作正常)
用户最初与Google签约,稍后用Facebook登录或通过电子邮件和密码注册.
帐户链接工作正常,Facebook和/或电子邮件添加到提供者列表中.
因此,我可以为电子邮件提供2或3个提供商,谷歌(最初),Facebook和密码(之后).
场景2 :(错误)
用户最初使用Facebook和/或电子邮件注册,稍后使用Google登录,现在帐户链接无效. Google取代之前的提供商.
帐户关联失败,我只是将谷歌作为与电子邮件地址关联的唯一提供商,其他人已经不在了.
在第二种情况下,在使用Google登录时,它应该会失败并抛出FirebaseAuthCollisionException,但它不会成功.这是主要问题.
firebaseAuth .signInWithCredential(credential) .addOnFailureListener(exception -> { if (exception instanceof FirebaseAuthUserCollisionException) { mCredentialToLinkWith = credential; if (mProviderList.size() == 1) { if (mProviderList.contains(EmailAuthProvider.PROVIDER_ID)) { mRegisterProviderPresenter.linkWithEmailProvider(credential,email); } else { linkProviderAccounts(email,AuthenticationHelper.getProviderToLinkAccounts(mWeakActivity,mProviderList)); } } else { linkProviderAccounts(email,mProviderList)); } } else { Timber.d("Failed in signInWithCredential and unexpected exception %s",exception.getLocalizedMessage()); mRegisterProviderPresenter.onRegistrationFailed(new ErrorBundle(ErrorBundle.FIREBASE_ERROR,exception.getLocalizedMessage())); } }) .addOnSuccessListener(authResult -> { Timber.d("Success: signInCred"); FirebaseUser firebaseUser = authResult.getUser(); /** * Store the user details only for first time registration * and not while acc linking */ storeUserCredentials(firebaseUser); AuthenticationHelper.logUserDetails(firebaseUser); mRegisterProviderPresenter.onRegistrationSuccess(mAlreadyRegistered); });
希望有人能提出一些帮助.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。