以下是我的方案,如果用户先在我的网络应用程序中使用Google提供商登录,之后有时相同的用户可能会尝试使用Facebook提供商登录,现在如果用户的Facebook提供商电子邮件ID与以前的google提供商邮件ID在firebase中,它会抛出错误,例如" account-exists-with-different-credential"在这种情况下,firebase将向我们提供facebook提供商的电子邮件ID,并指示我们获取"向用户询问他的密码。"我会问他们什么密码,如果用户必须输入Gmail密码,用户就可以在第三方网站输入他们的Gmail密码
答案 0 :(得分:0)
在您的情况下,您还将在auth / account-exists-with-different-credential错误中获取电子邮件和凭据对象(facebook凭证)(error.credential和error.email)。然后你可以打电话
auth.fetchProvidersForEmail(error.email)
获取与该电子邮件对应的现有提供商列表。在这种情况下,您将获得一个数组['google.com']。使用其中一个提供程序,您可以将用户登录到该提供程序。
auth.signInWithPopup(new firebase.auth.GoogleAuthProvider());
您还可以在google提供程序中将login-hint:error.email设置为自定义OAuth参数。
用户登录后。然后将之前的facebook凭据链接到该用户:
currentUser.link(error.credential);
您现在将Facebook帐户链接到现有的Google帐户。下次用户尝试通过Facebook登录时,不会再次抛出错误。