Я пытаюсь связать несколько провайдеров авторизации с одной учетной записью, используя firebase
. Пользователь пытается создать учетную запись с тем же адресом, что и учетная запись Google OAuth, которая уже находится на firebase
.
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
:
auth / email-Уже -in-use
но, pendingCred
или error.email
возвращаться undefined
.
Обновление
Я принял совет и попробовал следующее:
firebase.auth()
.EmailAuthProvider
.credential(email, password)
.then(result => console.log("result", result))
.catch(error => console.log(error))
Я получаю сообщение об ошибке:
[TypeError: undefined не является объектом (оценка '_firebase.default.auth (). EmailAuthProvider.credential ')]