我正在尝试使用firebase
将多个身份验证提供程序链接到一个帐户。用户正在尝试使用与firebase
上已有的Google OAuth帐户相同的地址创建一个帐户。
firebase
.auth()
.createUserWithEmailAndPassword(email, password)
.then(async result => {
if (result.additionalUserInfo.isNewUser) {
firebase
.database()
.ref('/users/' + result.user.uid)
.set({
email: email,
profile_picture: image,
first_name: firstName,
last_name: lastName,
created_at: Date.now()
})
.then(snapshot => console.log("do something"))
} else {
firebase
.database()
.ref('/users/' + result.user.uid)
.update({
last_logged_in: Date.now()
})
.then(snapshot => console.log("do something"))
}
})
.catch(error => {
if (error.code === 'auth/email-already-in-use' || error.code === 'auth/credential-already-in-use' || error.code === 'auth/account-exists-with-different-credential') {
const pendingCred = error.credential
const email = error.email
firebase
.auth()
.fetchSignInMethodsForEmail(email)
.then(methods => {
switch (methods[0]) {
case 'password':
// email and password logic
break;
case 'facebook.com':
// facebook logic
break;
default:
break;
}
})
return;
}
})
问题是我收到正确的错误消息:
[错误:该电子邮件地址已被另一个帐户使用。]
和适当的error.code
:
已在使用身份验证/电子邮件
但是,pendingCred
或error.email
返回undefined
。
更新
我接受了建议,并尝试了以下方法:
firebase.auth()
.EmailAuthProvider
.credential(email, password)
.then(result => console.log("result", result))
.catch(error => console.log(error))
我遇到了错误:
[TypeError:未定义不是对象(正在评估'_firebase.default.auth()。EmailAuthProvider.credential')]
答案 0 :(得分:1)
您正在使用createuserwithEmailAndPassword
,其中不包含error.email
或error.credential
。根据获取错误的文档,您可以使用error.message
或error.code
:
firebase.auth().createUserWithEmailAndPassword(email, password)
.catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
if (errorCode == 'auth/weak-password') {
alert('The password is too weak.');
} else {
alert(errorMessage);
}
console.log(error);
});
根据文档,如果出现以下错误代码,则使用error.email
和error.credential
:
auth/credential-already-in-use
auth/account-exists-with-different-credential
https://firebase.google.com/docs/reference/js/firebase.auth.Auth#error-codes_5
https://firebase.google.com/docs/reference/js/firebase.auth.Auth.html#sign-inwith-credential