【问题标题】:Function creates new user authentication in firebase but won't create a corresponding document in User collection函数在 Firebase 中创建新的用户身份验证,但不会在用户集合中创建相应的文档
【发布时间】:2021-07-03 04:04:16
【问题描述】:

我正在尝试创建一个函数,当用户注册时,该函数会在 Firestore 中创建一个具有相应用户 ID 的用户文档。

function signup(email, password) {
  return auth.createUserWithEmailAndPassword(email, password)
  .then(cred => {
    return firebase.firestore().collection('users').doc(cred.user.uid)
           .set({email})
    })
}

它会在身份验证中创建一个新用户,但它不会在用户集合中创建文档。我使用了在 stackoverflow 和各种教程中找到的此代码的许多变体。不知道还能做什么。

【问题讨论】:

    标签: javascript reactjs firebase google-cloud-firestore


    【解决方案1】:

    确保您已经创建了名为 "users" 的集合。

    如下编辑您的代码以记录信用和/或错误,以便您可以有效地调试问题。

    function signup(email, password) {
      return auth.createUserWithEmailAndPassword(email, password)
      .then(cred => {
        console.log(cred);
        return firebase.firestore().collection('users').doc(cred.user.uid)
               .set({email})
        })
    }
    // as you are returning promise from signup...
    signup(email, password)
    .then(() => console.log('doc written'))
    .catch((error) => {
        console.error("Error writing document: ", error);
    });
    

    希望这能让你朝着正确的方向前进!

    【讨论】:

      【解决方案2】:

      这两个操作都返回Promises,所以我建议使用async function

      async function signup(email, password) {
        return auth.createUserWithEmailAndPassword(email, password).then(cred => {
          return firebase.firestore().collection('users').doc(cred.user.uid).set({ 
            email
          }).then(() => {
            console.log("Document Added")
            return true
          })
        })
      } 
      
      // Handling the promise returned by signup function
      signup(email, password).then(() => {
        console.log("User document added")
      }).catch((e) => console.log(e))
      

      您也可以像这样使用async-await 语法。

      async function signup(email, password) {
        try {
          const cred = await firebase.auth().createUserWithEmailAndPassword(email, password)
          await firebase.firestore().collection('users').doc(cred.user.uid).set({
            email
          })
          return true
        } catch (e) {
          console.log(e)
          return e
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-29
        • 1970-01-01
        • 1970-01-01
        • 2020-01-05
        • 2020-06-10
        • 2019-06-17
        • 1970-01-01
        • 1970-01-01
        • 2021-09-07
        相关资源
        最近更新 更多