Firebase Обновление пользовательских данных с помощью пользовательских полей после создания пользователя - PullRequest
1 голос
/ 22 октября 2019

Я хочу обновить вновь созданные данные пользователя. Возвращается JSON:

{ 
"user":{ 
  "uid":"test123",
  "displayName":null,
  "photoURL":null,
  "email":"test12@test.com",
  "emailVerified":false,
  "phoneNumber":null,
  "isAnonymous":false,
  "tenantId":null,
  "providerData":[ 
     { 
        "uid":"test12@test.com",
        "displayName":null,
        "photoURL":null,
        "email":"test12@test.com",
        "phoneNumber":null,
        "providerId":"password"
     }
  ],
  "apiKey":"test123",
  "appName":"[DEFAULT]",
  "authDomain":"test123.firebaseapp.com",
  "stsTokenManager":{ 
     "apiKey":"test123",
     "refreshToken":"test123",
     "accessToken":"test123",
     "expirationTime":1571238989357
  },
  "redirectEventId":null,
  "lastLoginAt":"1571235389108",
  "createdAt":"1571235389108"
},
"credential":null,
"additionalUserInfo":{ 
  "providerId":"password",
  "isNewUser":true
},
"operationType":"signIn"
}

Это мой выноска и обновление:

createUser = async (userData) => {
  return await firebase.auth().createUserWithEmailAndPassword(userData.get('userName'), userData.get('password'))
  .then((authData) => {
    firebase.database().ref('users/' + authData.user.uid + '/').set({
       fullName: userData.get('fullName'),
       pictures: userData.get('pictures'),
       phoneNumber: userData.get('phoneNumber')

    });
  })
};

Возможно ли добавить в пользовательские поля таблицы пользователя?

Несколько вещей происходит. Похоже, что userData не может быть видно в .hen оператора. Поэтому, чтобы решить эту проблему, я попытался передать JSON userData в качестве параметра. Это не сработало. Затем я выделил каждое значение из userData, сохранил его в const и передал это значение. Это не сработало.

Я вижу, что в userData есть значения перед оператором .then. Я могу успешно создать нового пользователя с правильными именем пользователя и паролем. Для меня это означает либо:

A - Я неправильно передаю userData JSON, либо

B - Мне не разрешено передавать данные в базу данных, как я делаю

Моя конечная цель - зарегистрировать пользователя, а затем взять все данные, которые он вводит, из регистрационной формы (он же userData) и обновить таблицу пользователей с ее помощью.

Статьи, которые я использую: https://firebase.google.com/docs/auth/web/manage-users https://medium.com/mindorks/firebase-realtime-database-with-react-native-5f357c6ee13b

Основной класс, вызывающий функцию createUser:

const signUp  = (dispatch) => {
    return  async (userData)=>{
        try{
            const response = await config.createUser(userData);
            console.log('sign up resonse1: ' + response); //coming back as undefined
            //todo:: figure out how to parse out the apikey out of response
            await AsyncStorage.setItem('token', '123mockToken');  
            dispatch({type: 'sign_up', payload: '123mockToken'}); 
            navigate('mainFlow'); 
        } catch(e){
            dispatch({type: 'add_error', payload: '' + e}); //we call dispatch anytime we want to update our state
        }
    }
};

1 Ответ

3 голосов
/ 22 октября 2019

Я понимаю, что параметр userData содержит все данные, которые вы хотите использовать для создания пользователя («все данные, которые они вводят из формы регистрации»).

Должно работать следующее:

  createUser = async userData => {
    try {

      const userCredential = await firebase
        .auth()
        .createUserWithEmailAndPassword(
          userData.get('userName'),
          userData.get('password')
        );

      const userId = userCredential.user.uid;

      await firebase
        .database()
        .ref('users/' + userId + '/')
        .set({
          fullName: userData.get('fullName'),
          pictures: userData.get('pictures'),
          phoneNumber: userData.get('phoneNumber')
        });

      return userId;  //As per your comment below

    } catch (error) {
      return error;
    }
  };

Метод createUserWithEmailAndPassword() возвращает UserCredential, который содержит User.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...