Облачная функция Firebase не может прочитать свойство 'displayName' из неопределенного - PullRequest
1 голос
/ 02 февраля 2020

Я хочу создать профиль пользователя в базе данных в реальном времени после входа в Google в моем приложении android. Итак, я попробовал этот код в облачной функции, чтобы сделать это.

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.AddAccount = functions.auth.user().onCreate(event => {

    const user = event.data;
    var userObject = {
        displayName : user.displayName,
        email : user.email,
        photoUrl : user.photoURL,
        createdOn : user.metadata.createdAt
    };
    admin.database().ref('users/' + user.uid).set(userObject);
});

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

TypeError: Cannot read property 'displayName' of undefined
at exports.AddAccount.functions.auth.user.onCreate.event (/srv/index.js:10:22)
at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:131:23)
at /worker/worker.js:825:24
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)

, пожалуйста, помогите мне исправить эту ошибку

1 Ответ

0 голосов
/ 02 февраля 2020

Метод onCreate возвращает объект пользователя, а не событие с данными:

exports.AddAccount = functions.auth.user().onCreate(user => {
  const userObject = {
    displayName : user.displayName,
    email : user.email,
    photoUrl : user.photoURL,
    createdOn : user.metadata.createdAt
  };

  return admin.database().ref('users/' + user.uid).set(userObject);
});

О другой ошибке. Не разрешено импортировать свойство со значением undefined. Это должно быть либо определено, null, либо не помещено вообще.

Причина, по которой вы получаете ошибку, заключается в том, что объект metadata обладает свойством creationTime.

Таким образом, чтобы быть в безопасности, вы можете сделать это следующим образом:

const userObject = {
  displayName : user.displayName,
  email : user.email,
  photoUrl : user.photoURL,
  createdOn : user.metadata.creationTime || null
};

Рекомендуется хорошо прочитать документацию и API, прежде чем нажимать новую функцию, это будет сэкономить время:)

...