【问题标题】:React native firebase creating user then adding additional data to realtime database反应原生 firebase 创建用户,然后将其他数据添加到实时数据库
【发布时间】:2018-04-28 10:53:49
【问题描述】:

我正在创建一个允许用户自己注册的应用程序。

使用 react-native 和 firebase 工作,注册并登录。甚至附加数据也存储在实时数据库中(我检查过)。 但是我收到一条消息说“创建用户失败”(这是我设置的消息之一)。

这是我用来创建用户并向实时数据库添加额外数据的代码:

firebase.auth().createUserWithEmailAndPassword(email, password)
    .then((user) => {
        firebase.database().ref('users/' + user.uid).set({
            firstName: firstName,
            lastName: lastName,
            email: email,
            code: code
        })
    })
    .then(user => loginUserSuccess(dispatch, user))
    .catch((error) => {
        createUserFail(dispatch)
        console.log(error);
    });

我还检查了android studio中的调试器(还不知道ios),看到如下评论:

TypeError: undefined is not an object (evaluating 'user.uid')

仍然保存了所有内容,但显示了错误消息。我做错了什么?

【问题讨论】:

  • 你用的是什么库?
  • 看起来问题出在user.uid 附近,你能不能用console.log 和console.log firebase.database().ref('users/' + user.uid) 看看你得到了什么。
  • 会尽力回复您
  • @mjwatts 我尝试了 console.log,第一个是记录 user.uid,我明白了。第二个是 url:urltofirebase/users/the 与第一个 console.log 相同的 uid。我将 console.logs 放在了第一个然后就在 firebase 之前。

标签: android ios react-native firebase-realtime-database


【解决方案1】:

我知道这已经有一年了,但我遇到了同样的问题,对于遇到同样问题的人来说,这里有一个更直接的解决方案。创建用户时,用户对象是 Firebase 响应的一部分,而不是响应本身。因此,只需将“res”添加到您的原始代码中,如下所示:

firebase.auth().createUserWithEmailAndPassword(email, password)
.then((res) => {
    firebase.database().ref('users/' + res.user.uid).set({
        firstName: firstName,
        lastName: lastName,
        email: email,
        code: code
    })
})

【讨论】:

    【解决方案2】:

    好的,我终于搞定了。我所做的是,在第一次之后,检查当前用户(因为用户将自动登录),然后获取 uid 并使用它:

    if (firebase.auth().currentUser) {
        userId = firebase.auth().currentUser.uid;
        if (userId) {
            firebase.database().ref('users/' + userId).set({
                firstName: firstName,
                lastName: lastName,
                email: email,
                code: code
            })
        }
    }
    

    这行得通。

    【讨论】:

      【解决方案3】:
      firebase.auth().createUserWithEmailAndPassword(email, password).then((user)=>{
          if (firebase.auth().currentUser) {
            userId = firebase.auth().currentUser.uid;
            if (userId) {
                firebase.database().ref('users/' + userId).set({
                  firstname:firstname,
                  lastname:lastname,
                  email:email,
                  password:password,
                  town:town,
                  addInterest:addInterest,
                  photoUrl:false,
                  emailVerified:false,
                  uid:userId,
                  status:true,
                  online:true
                })
            }
          }
        }).catch(function(error) {
          // Handle Errors here.
            var errorCode = error.code;
            var errorMessage = error.message;
            console.log('Register!');
            console.log(error);
        })
      

      完整代码非常易于使用。 100% 工作!

      【讨论】:

      • 请始终将您的答案放在上下文中,而不仅仅是粘贴代码。有关详细信息,请参阅here
      【解决方案4】:

      你没有说你是否在动作创建者的上下文中使用它,但如果你这样做了,这是另一种可能的解决方案。让我们让它更有趣,它是一个添加新员工的应用程序:

      export const employeeCreate = ({ name, phone, shift }) => {
        const { currentUser } = firebase.auth();
      
        return () => {
          firebase
            .database()
            .ref(`/users/${currentUser.uid}/employees`)
            // add a .then() to ensure after employee is created
            // we want to navigate them back to employee list screen
            .push({ name, phone, shift })
            .then(() => Actions.pop());
        };
      };
      

      Actions 将从 react-native-router-flux 导入,如下所示:

      import firebase from 'firebase';
      import { Actions } from 'react-native-router-flux';
      

      【讨论】:

        猜你喜欢
        • 2017-03-10
        • 1970-01-01
        • 2017-02-18
        • 1970-01-01
        • 2019-08-12
        • 2017-12-28
        • 2020-07-30
        • 2021-11-03
        • 2021-10-04
        相关资源
        最近更新 更多