Я могу создать новую учетную запись, используя firebase auth, но тогда я не могу сохранить новый uid в хранилище firestore - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь реализовать страницу регистрации для своего приложения React. Идея состоит в том, чтобы использовать firebase auth для создания новых учетных записей, а затем использовать их новые uid для создания новых документов в базе данных firestore. Проблема в том, что когда я пытаюсь запустить функцию, которая обрабатывает это, она выполняет только один из моих запросов к службам firebase. Итак, все, что приходит первым, работает, но второй запрос никогда не запускается, никаких ошибок или чего-то еще. И так как запрос аутентификации должен сначала go, я не могу сохранить всю информацию из моей регистрационной формы в базе данных firestore.

Я пробовал несколько разных асинхронных c подходов, но ничего не работает. Вот мой код с использованием redux sagas:

import { takeLatest } from 'redux-saga/effects';
import { db, auth } from '../firebase';

function* createProducerAccount (action){
    try{
        const { email, password } = action.payload.account;
        const response = yield auth.createUserWithEmailAndPassword(email, password);
        console.log(response.user.uid);
        yield db.collection("producers").doc(response.user.uid).set(action.payload.producer);
    }
    catch(error){
        console.log('Error in createProducerAccount', error);
    }
}

function* userSaga(){
    yield takeLatest('CREATE_PRODUCER', createProducerAccount);
}

export default userSaga;

Вот другой подход с использованием .then (). Catch () promises:

export function createAccount(name, email, password, address, token) {
  return dispatch => {
    return auth
      .createUserWithEmailAndPassword(email, password)
      .then(res => {
        const { uid } = res.user;

        return db
          .collection("producers")
          .doc(uid)
          .set(
            {
              displayName: name,
              uid: uid,
              address: address,
              token: token.token,
              followers: [],
              email: email
            },
            { merge: true }
          );
      })
      .catch(error => {
        let errorCode = error.code;
        let errorMessage = error.message;
        console.log(`ERROR (${errorCode}): ${errorMessage}`);
      });
  };
}

Вот список вещей, которые я сделал для устраните проблему с помощью обоих подходов:

  • Пробовал использовать метод .add () вместо .set () - та же проблема
  • Закомментируйте auth.createUserWithEmailAndPassword () в подходе саги заставляет работать запрос firestore
  • Я думал, что это может быть проблема из-за того, что информация не возвращается вовремя с сервера, но я использовал введенную вручную информацию в запросе, и это тоже не сработало
  • Пытался разделить два запроса на две функции - та же проблема
  • Пытался удалить {merge: true} из второго подхода - такая же проблема
  • Даже пытался принести в жертву богам программирования мой малиновый пи, но им нравятся только arduinos

Пожалуйста, помогите!

1 Ответ

1 голос
/ 16 июля 2020

Я исправил проблему, нашел ответ в сообществе с нулевым баллом и буквально внизу каждого второго ответа, и это сработало! Вот ссылка ...

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