我已经遇到了这个问题很长时间了,我决定在这里发布问题。
我的问题是在Firebase中合并帐户(Facebook和Google)。独立注册与他们中的任何一个都可以很好地注册。
首先,当用户与Google签约并随后通过Facebook注册(与Google具有相同的电子邮件地址),它会引发和错误。我设法处理了您在下面的代码上看到的错误,但我不知道如何合并两个帐户。
这是我到目前为止所做的:
facebookSignin: function() {
var self = this
firebase.auth().signInWithPopup(facebookProvider).then(function(result) {
var token = result.credential.accessToken;
var user = result.user;
self.registerProfile()
}).catch(function(error) {
var errorCode = error.code;
var errorMessage = error.message;
console.log("ERROR:" + error)
console.log("email is : " + error.email)
if (errorCode == 'auth/account-exists-with-different-credential') {
firebase.auth().fetchProvidersForEmail(error.email).then(providers => {
//providers returns this array -> ["google.com"]
console.log("Providers:" + providers)
console.log("Credential: " + JSON.stringify(error.credential))
firebase.auth().currentUser.link(error.credential).then(function(user) {
console.log("Account linking success", user);
});
}).catch(function(error){
console.log("error:" + error)
})
}
console.log("error code:" + error.code+ "error msg:" + error.message)
});
- 首先,我已经与Google签约
- 现在我想使用相同的电子邮件地址登录Facebook我明显地获得了当前的用户零,因为用户未登录,这是错误:
error:TypeError: __WEBPACK_IMPORTED_MODULE_1_firebase___default.a.auth(...).currentUser is null
。
我阅读了有关合并部分的文档,但仍然无法解决。https://firebase.google.com/docs/auth/web/web/account-linking#link-federated-auth-provider-credentials-to-a-user-user-asccount
我真的很感谢您的帮助。
fetchProvidersForEmail
并找出现有的Google用户后,您必须先登录到该现有帐户:
firebase.auth().signInWithPopup(new firebase.auth.GoogleAuthProvider().setCustomParameters({login_hint: error.email})...
完成之后,您:
firebase.auth().currentUser.linkWithCredential(error.credential)
因此,用户首先必须在链接Facebook帐户之前验证现有帐户的所有权。