尝试在Firebase中链接多个身份验证提供程序时,从error.email中获取“未定义”

时间:2020-01-18 20:24:48

标签: javascript firebase react-native firebase-authentication expo

我正在尝试使用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

已在使用身份验证/电子邮件

但是,pendingCrederror.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')]

1 个答案:

答案 0 :(得分:1)

您正在使用createuserwithEmailAndPassword,其中不包含error.emailerror.credential。根据获取错误的文档,您可以使用error.messageerror.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.emailerror.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