Я пытаюсь реализовать страницу регистрации для своего приложения 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
Пожалуйста, помогите!