firebase / firestore将用户保存到集合

时间:2020-06-23 03:11:36

标签: javascript firebase google-cloud-firestore firebase-authentication

我正在尝试将用户保存到Firestore中的集合。似乎正在创建用户,我可以在Authentication标签中看到他们,但是他们没有保存到我的Firestore中的集合中。我的控制台内似乎也没有任何错误。我已经为此苦苦挣扎了两个小时,我什至不知道如何调试它。

export const authMethods = {
  signup: (email, password, setErrors, setToken) => {
    firebase
      .auth()
      .createUserWithEmailAndPassword(email, password)
      // make res asynchronous so that we can make grab the token before saving it.
      .then(async res => {
        const token = await Object.entries(res.user)[5][1].b
        // set token to localStorage
        await localStorage.setItem('token', token)
        // grab token from local storage and set to state.
        setToken(window.localStorage.token)
        const userUid = firebase.auth().currentUser.uid
        const db = firebase.firestore()
        db.collection('/users')
          .doc(userUid)
          .set({
            email,
            password,
          })
        console.log(res)
      })
      .catch(err => {
        setErrors(prev => [...prev, err.message])
      })
  },
 ....
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

await中删除localStorage.setItem,这不是一个异步函数。

您还需要将等待添加到db.collection("/users").doc(userUid)


这是您可以执行的另一种方法。让云功能为您解决这个问题。

无论何时创建用户,都会触发以下功能。

export const onUserCreate = functions.auth
  .user()
  .onCreate(async (user, context) => {
    await admin.firestore().collection("users").doc(user.uid).set({
      id: user.uid,
      emailAddress: user.email,
      verified: user.emailVerified,
    });
  });

如果您需要有关云功能的更多信息,请阅读以下内容。

https://firebase.google.com/docs/functions/get-started