【问题标题】:adding data in firebase firestore React在 Firebase Firestore React 中添加数据
【发布时间】:2020-06-05 23:51:23
【问题描述】:

我有singUp 功能。我在身份验证部分成功创建了一个新用户。之后我什至可以得到他的uid。但我不知道为什么在集合user 函数中设置一个新文档不起作用。就像它永远不会开始一样。即使.then().catch() 方法也不会显示它们的console.log()。我在另一个项目中使用几乎相同的代码,一切都很好。

export const signUp = (newUser) => {
    return (dispatch, getState) => {

        firebase.firestore().collection('users').where('nick', '==', newUser.nick).get()
            .then(snapshot => {
                if (snapshot.empty) {
                    firebase.auth().createUserWithEmailAndPassword(
                        newUser.email,
                        newUser.password
                    ).then((resp) => {
                        console.log(resp)
                        console.log(resp.user.uid)

                        firebase.firestore().collection("users").doc(resp.user.uid).set({
                            name: newUser.name,
                            age: newUser.age
                        }).then(function () {
                            console.log("Document successfully written!");
                        }).catch(function (error) {
                            console.error("Error writing document: ", error);
                        });

                    }).then(() => {
                        dispatch({ type: "SIGNUP_SUCCESS" });
                    }).catch((err) => {
                        console.log(err)
                        let error;
                        if (err.code === 'auth/email-already-in-use')
                            error = 'Adres e-mail jest już w użyciu!'
                        dispatch({ type: "SIGNUP_ERROR", error })
                    })
                } else {
                    let error = 'Ten nick jest już zajęty!'
                    dispatch({ type: "SIGNUP_ERROR", error })
                }
            })

    }
}

还有我的控制台:

【问题讨论】:

  • 看起来这些日志被打印出来了:console.log(resp) console.log(resp.user.uid),这也显示了dispatch({ type: "SIGNUP_SUCCESS" });。什么不起作用
  • 将用户添加到“用户”集合中。 console.log(resp.user.uid)之后的函数
  • 您忘记在createUserWithEmailAndPassword 的第一个then 中返回承诺
  • 我不明白你的意思...

标签: reactjs firebase google-cloud-firestore


【解决方案1】:

您需要通过设置用户的集合返回promise,如下所示:

export const signUp = (newUser) => {
    return (dispatch, getState) => {

        firebase.firestore().collection('users').where('nick', '==', newUser.nick).get()
            .then(snapshot => {
                if (snapshot.empty) {
                    firebase.auth().createUserWithEmailAndPassword(
                        newUser.email,
                        newUser.password
                    ).then((resp) => {
                        console.log(resp)
                        console.log(resp.user.uid)

                        // ******* add the return statement here *******
                        return firebase.firestore().collection("users").doc(resp.user.uid).set({
                            name: newUser.name,
                            age: newUser.age
                        }).then(function () {
                            console.log("Document successfully written!");
                        }).catch(function (error) {
                            console.error("Error writing document: ", error);
                        });

                    }).then(() => {
                        dispatch({ type: "SIGNUP_SUCCESS" });
                    }).catch((err) => {
                        console.log(err)
                        let error;
                        if (err.code === 'auth/email-already-in-use')
                            error = 'Adres e-mail jest już w użyciu!'
                        dispatch({ type: "SIGNUP_ERROR", error })
                    })
                } else {
                    let error = 'Ten nick jest już zajęty!'
                    dispatch({ type: "SIGNUP_ERROR", error })
                }
            })

    }
}

【讨论】:

  • 是的。我才看到你什么意思。但这没有帮助,现在我的功能刚刚停止。即使是 `dispatch({ type: "SIGNUP_SUCCESS" });` 现在也不起作用。
  • 我好像可以从数据库中读取数据,但是我不能写新文档……
  • @poldeeek 你的安全规则是什么样的?
  • 我是在测试模式下创建的,没有碰它们:match /{document=**} { allow read, write: if request.time < timestamp.date(2020, 7, 6); }
  • @poldeeek 您的安全规则看起来不错。你能发布错误日志吗?
猜你喜欢
  • 2018-07-15
  • 2018-04-17
  • 1970-01-01
  • 2019-08-18
  • 2018-03-20
  • 1970-01-01
  • 2021-08-10
  • 2021-09-27
  • 2020-04-09
相关资源
最近更新 更多