Javascript Firebase使用新提供商(Google)登录将删除以前的提供商(密码)
我正在使用Firebase(v3)Auth登录,遇到了以下问题:Javascript Firebase使用新提供商(Google)登录将删除以前的提供商(密码),javascript,firebase,firebase-authentication,Javascript,Firebase,Firebase Authentication,我正在使用Firebase(v3)Auth登录,遇到了以下问题: 用户最初使用电子邮件和密码注册 注销 稍后,登录谷歌 我预计会出现一个错误,抱怨电子邮件地址用于其他帐户,然后要求用户键入密码以链接帐户,但Firebase会自动删除电子邮件/密码登录方法并返回成功消息 谷歌认证代码: var provider = new firebase.auth.GoogleAuthProvider(); firebase.auth().signInWithPopup(provider).then(
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider).then(
result => {
console.log("federated (google) result", result);
},
error => {
console.log("federated (google) error", error);
}
);
使用电子邮件和密码进行身份验证的代码:
// Login:
firebase.auth().signInWithEmailAndPassword(this.state.email, this.state.password).then(
ok => {
console.log("email/pass sign in success", ok);
},
error => {
console.log("email/pass sign in error", error);
}
)
// Register:
firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password).then(
ok => {
console.log("Register OK", ok);
},
error => {
console.log("Register error", error);
}
)
我看到帐户链接是通过首先使用用户当前的提供者/方法登录用户,然后才为新的身份验证方法/提供者请求凭据/获取令牌来完成的。在我的例子中,我不知道他们是否有其他身份验证提供程序,直到太晚了(Firebase会覆盖它)
在Firebase覆盖现有帐户的详细信息并要求用户键入密码并链接帐户之前,是否有方法检测电子邮件已被接收?或者,更好的办法是,自动链接这些帐户,因为他们已经使用谷歌登录,并且电子邮件地址匹配?我找到了答案。Firebase按其应有的方式运行,这不是技术/编码问题。这更像是一个文档问题 当用户使用电子邮件和密码注册、注销并使用其他方法(以前从未使用过)登录时,可能会发生两种情况:
displayName
这样的用户详细信息不会自动更新// After asking the user for their email.
var email = window.prompt('Please provide your email');
firebase.auth().fetchSignInMethodsForEmail(email)
.then((signInMethods) => {
// This returns the same array as fetchProvidersForEmail but for email
// provider identified by 'password' string, signInMethods would contain 2
// different strings:
// 'emailLink' if the user previously signed in with an email/link
// 'password' if the user has a password.
// A user could have both.
if (signInMethods.indexOf(
firebase.auth.EmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD) != -1) {
// User can sign in with email/password.
}
if (signInMethods.indexOf(
firebase.auth.EmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD) != -1) {
// User can sign in with email/link.
}
})
.catch((error) => {
// Some error occurred, you can inspect the code: error.code
});
我找不到用于此的FlatterFire文档,但我找到了用于此的Web文档。您也可以在颤振中使用它
按照此链接访问文档:因为Firebase 3允许您使用不同的McHanism登录。。您可能希望将不同的机制链接在一起以获得统一的视图。参考答案:那是正确的。我想链接不同的机制,但具体的问题(或困惑,见答案)是,当用户已经拥有一个机制a(比如电子邮件/密码)的帐户,并且下次访问时,他忘记了它,并使用方法B(比如谷歌)登录时会发生什么。电子邮件地址相同,因此应自动链接帐户(按编程方式,您在登录期间不知道已存在该电子邮件的帐户),或者登录应返回错误,以便您可以登录以处理此问题。我在回答中写下了实际发生的情况。你仍然没有回答你自己的问题,有没有办法检测并告诉用户这将要发生?我回答了我问题中的“或者更好”部分。我想做这张支票的唯一目的就是把账户联系起来。因为如果电子邮件被验证,这会自动发生,所以我不需要再做检查了。简而言之,我还没有找到这样做的方法。如果不使用电子邮件验证,最好有一个解决方案,可以在SSO完成之前的某个时间点通知用户(他们的密码将不再工作)。我明白你的意思,很遗憾,我没有为您提供解决方案。找到一份可能对您的答案有用的文档: