Firebase auth onCreate добавляет пользовательские данные в базу данных реального времени - PullRequest
0 голосов
/ 17 апреля 2020

Я создаю приложение React Native с Firebase для своего бэкэнда. Аутентификация Firebase используется для создания пользователя, и всякий раз, когда пользователь создается, я также сохраняю пользовательские данные в базе данных в реальном времени. Для этого я использую облачную функцию Firebase (Javascript):

exports.createCustomUser = functions.auth.user().onCreate((user) => {
  const email = user.email;
  const userId = user.uid;
  const body = {
    // The default values for a user
    userId,
    username: "",
    nickname: "",
    activityDuration: "2",
    isPumping: false,
    email: email,
    position: "",
  };
  return admin.database().ref(`/users/${userId}`).set(body);
});

Если я правильно понимаю, похоже, что метод onCreate() происходит после создания пользователя auth, а не одновременно , Есть ли способ создать пользовательского пользователя одновременно с пользователем Auth?

Если это невозможно: моя проблема возникает сразу после регистрации пользователя. Когда создается пользователь аутентификации (и токен), он перенаправляется на мой домашний экран, где я возвращаю JSX, который содержит определенную информацию от пользовательского пользователя, например: <Text>{customUser.activityDuration}</Text>. Проблема заключается в том, что в течение нескольких минут, необходимых для завершения метода onCreate, customUser равно null, а вызов ActivityDuration возвращает ошибку.

Какие решения лучше всего использовать для решения этой проблемы

1 Ответ

1 голос
/ 17 апреля 2020

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

Вместо этого вы можете настроить прослушиватель базы данных в том месте базы данных, которое должно быть записано после завершения функции. , Ваш код должен иметь UID вновь созданного пользователя, и вы можете использовать его для построения местоположения для запроса, которое должно быть заполнено после завершения функции. Ваш слушатель сработает, когда данные впервые станут доступны, и ваше приложение сможет продолжить оттуда.

Это очень похоже на то, что я рекомендую в моей статье о разгрузке работы в Cloud Functions , за исключением мой пример использует Firestore.

...