Firebase 身份验证为 createUserWithEmailAndPassword 返回未定义

时间:2021-07-01 08:44:57

标签: javascript firebase

我有一个函数可以通过 Firebase 身份验证创建一个新用户,有一段时间我可以使用它,但现在它返回未定义。我尝试使用 async await 在没有帮助的情况下等待输入,但我不确定会出现什么问题。我无法在此处包含我的 Firebase 身份验证代码,但我将其余代码放在 CodePen 上:

https://codepen.io/TheNomadicAspie/pen/ZEKYwWJ

这里是相关的函数:

function newUserSubmitEmail() {
    traceFunction()
    new_user_dict['email'] = input_text.value.trim()
    console.log('newUserSubmitEmail email is ', new_user_dict['email'])
    question.innerText = "What password would you like to use?"
    input_text.value = ''
    right_button.onclick = newUserSubmitPassword
}

function newUserSubmitPassword() {
    traceFunction()
    new_user_dict['password'] = input_text.value.trim()
    console.log('newUserSubmitPassword password is ', new_user_dict['password'])
    question.innerText = "Ok, and enter it one more time just to make sure there's no typos."
    input_text.value = ''
    right_button.onclick = newUserVerifyPassword
}

function newUserVerifyPassword() {
    traceFunction()
    if (new_user_dict['password'] === input_text.value) {
        newUserSubmitEmailAndPassword()
    } else {
        question.innerText = "Those passwords didn't match. Let's try again."
        console.log('newUserVerifyPassword old password was ', new_user_dict['password'], ' new password is ', input_text.value)
        input_text.value = ''
        right_button.onclick = newUserSubmitPassword
    }
}

async function newUserSubmitEmailAndPassword() {
    traceFunction()
    console.log('newUserSubmitEmailAndPassword email is ', new_user_dict['email'], ' password is ', new_user_dict['password'])
    input_text.value = ''
    firebase.auth().createUserWithEmailAndPassword(await new_user_dict['email'], await new_user_dict['password']).then((userCredential) => {
            console.log('newUserSubmitEmailAndPassword User created successfully')
            userCreatedSuccessfully()
        })
        .catch(async (error) => {
            var errorCode = await error.code
            var errorMessage = error.message
            question.innerText = errorCode
            console.log('newUserSubmitEmailAndPassword Error creating user. Error code: ', errorCode, ' ', errorMessage)
            if (errorCode === 'auth/email-already-in-use') {
                newUserEmailInUse()
            } else if (errorCode === 'auth/invalid-email') {
                newUserTryEmailAgain()
            } else if (errorCode === 'auth/operation-not-allowed') {
                errorPleaseRefresh()
            } else if (errorCode === 'auth/weak-password') {
                newUserTryPasswordAgain()
            }
        })
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

也许是因为您在错误的地方使用了 await。代码是用 async/await 编写的,如下所示:

try {
  const userCredentials = await firebase
    .auth()
    .createUserWithEmailAndPassword(
      new_user_dict["email"],
      new_user_dict["password"]
    );
  console.log(
    "newUserSubmitEmailAndPassword User created successfully",
    userCredentials.user
  );
  // comment out this
  //userCreatedSuccessfully();
} catch (error) {
  var errorCode = await error.code;
  var errorMessage = error.message;
  question.innerText = errorCode;
  console.log(
    "newUserSubmitEmailAndPassword Error creating user. Error code: ",
    errorCode,
    " ",
    errorMessage
  );
  if (errorCode === "auth/email-already-in-use") {
    newUserEmailInUse();
  } else if (errorCode === "auth/invalid-email") {
    newUserTryEmailAgain();
  } else if (errorCode === "auth/operation-not-allowed") {
    errorPleaseRefresh();
  } else if (errorCode === "auth/weak-password") {
    newUserTryPasswordAgain();
  }
}