React native firebase创建用户,然后将其他数据添加到实时数据库

时间:2017-11-15 09:25:45

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

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

使用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')

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

4 个答案:

答案 0 :(得分:2)

我知道这已经一岁了,但是我遇到了同样的问题,对于遇到同样问题的任何人,这都是一个更直接的解决方案。创建用户时,用户对象是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
    })
})

答案 1 :(得分:0)

好的,终于让它运转了。我做的是,在第一个之后,检查当前用户(因为用户将自动登录),然后获取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
        })
    }
}

这很有效。

答案 2 :(得分:0)

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

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';

答案 3 :(得分:0)

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%工作!