【发布时间】:2016-10-16 18:17:24
【问题描述】:
我一直在我的应用中使用 Firebase 身份验证,并注意到特定用例存在问题。
我为我的应用启用了帐户链接注册流程,因此我可以附加与单个电子邮件地址关联的多个提供商。
场景 1:(工作正常)
用户最初是在 Google 上注册的,之后的某个时间,用 Facebook 登录或使用电子邮件和密码注册。
帐户链接工作正常,并且 Facebook 和/或电子邮件已添加到提供商列表中。
所以,我可以为电子邮件、Google(最初)、Facebook 和 Password(之后)提供 2 或 3 个提供商。
场景 2:(错误)
用户最初使用 Facebook 和/或电子邮件注册,后来使用 Google 登录,现在帐户链接不起作用。 Google 取代了以前的供应商。
帐户关联失败,我只是让 Google 作为与电子邮件地址关联的唯一提供商,而其他人都不见了。
在第二种情况下,在使用 Google 登录时,它应该会失败并抛出 FirebaseAuthCollisionException,但它不会并成功。 这是主要问题。
我不能在这里粘贴整个代码,但肯定只是一个 sn-p。
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, AuthenticationHelper.getProviderToLinkAccounts(mWeakActivity, 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);
});
希望有人能提供一些帮助。
【问题讨论】:
标签: android firebase firebase-authentication