Невозможно сохранить новую запись в базе данных реального времени firebase - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть этот кусок кода:

firebase.auth().createUserWithEmailAndPassword(email, password)
    .then(function(data){
      firebase.database().ref('Users').child('006').set({
        email: data.user.email,
        createdAt: data.user.createdAt
      }).then((data)=>{
        //success callback

        console.log('data ' , data);
      }).catch((error)=>{
        //error callback
        console.log('error ' , error)
      })
    }).catch(function(error) {
      //Handle error
    });

, что довольно просто, и что он в основном делает, это для проверки подлинности в системах Firebase и после его завершения, чтобы сохранить новую запись в базе данных реального времени, которую я также настроил там.

Проблема связана с этой частью кода:

email: data.user.email,
createdAt: data.user.createdAt

если я оставлю это так, он всегда использует значения 'data' (которые действительно доступны на данном этапе) и не создает новую запись в firebase. Если я сделаю это так:

email: 'data.user.email',
createdAt: 'data.user.createdAt'

немедленно добавляется новая запись (конечно, не с реальными значениями email и созданными на нем, а только со строками). Я пытался JSON.stringify / .toString () их, но снова безуспешно. Я действительно не знаю, что мне нужно сделать, чтобы добавить фактические значения в JSON, который передается методу set .

И одним из побочных недостатков является то, что я получаю это

Формат и пример содержимого того, что возвращается с

firebase.auth().createUserWithEmailAndPassword(email, password)

в списке аргументов then:

   {
   "user":{
      "uid":"some_user_id",
      "displayName":null,
      "photoURL":null,
      "email":"hshy@bshs.hs",
      "emailVerified":false,
      "phoneNumber":null,
      "isAnonymous":false,
      "providerData":[
         {
            "uid":"hshy@bshs.hs",
            "displayName":null,
            "photoURL":null,
            "email":"hshy@bshs.hs",
            "phoneNumber":null,
            "providerId":"password"
         }
      ],
      "apiKey":"some_api_key",
      "appName":"[DEFAULT]",
      "authDomain":"sub-dom.firebaseapp.com",
      "stsTokenManager":{
         "apiKey":"some_api_key",
         "refreshToken":"some_JWT_token",
         "accessToken":"some_JWT_token",
         "expirationTime":1541582223251
      },
      "redirectEventId":null,
      "lastLoginAt":"1541577292000",
      "createdAt":"1541577292000"
   },
   "credential":null,
   "additionalUserInfo":{
      "providerId":"password",
      "isNewUser":true
   },
   "operationType":"signIn"
}

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Проблема заключается в уровне доступа к:

createdAt: data.user.createdAt

Как вы можете видеть в моем вопросе, он доступен там в JSON, но по какой-то причине я не могу получить его значение, и это является причиной отсутствия новой записи и этого . Я буду приветствовать ответ @ Code.Warrior, потому что он в правильном направлении, но способ получения даты создания следующий:

.then(function(authResponse){
          firebase.database().ref('Users').child(authResponse.user.uid).set({
            email: authResponse.user.email,
            createdAt: authResponse.user.metadata.creationTime
          }).then((data)=>{
            //success callback

            console.log('data ' , data);
          }).catch((error)=>{
            //error callback
            console.log('error ' , error)
          })
        }).catch(function(error) {
          //Handle error
        });

Это еще один уровень вложенности.

0 голосов
/ 07 ноября 2018

Ты почти у цели.
В коде есть проблема с тем, как вы извлекаете информацию для хранения, поэтому она получается undefined и не сохраняется.
Это было бы что-то вроде:

firebase.auth().createUserWithEmailAndPassword(email, password)
    .then(function(authResponse){
      firebase.database().ref('Users').child('006').set({
        email: authResponse.user.email,
        createdAt: authResponse.user.metadata.creationTime
      }).then((data)=>{
        //success callback

        console.log('data ' , data);
      }).catch((error)=>{
        //error callback
        console.log('error ' , error)
      })
    }).catch(function(error) {
      //Handle error
    });

Вот ссылки на метод auth - firebase.auth.createUserWithEmailAndPassword
а для возвращаемого объекта - firebase.User

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