# #javascript #reactjs #firebase #redux-firestore
Вопрос:
поэтому я создаю небольшое веб-приложение, и это моя первая попытка использовать firebase и реагировать Js одновременно, поэтому моя проблема в том, что я пытаюсь создавать документ в fireStore каждый раз, когда регистрируется новый пользователь
// this is my SignUp Function
async function signUp(email, password,) {
await createUserWithEmailAndPassword(auth, email, password);
}
/*and Im calling in it my component and as onSubmit Function and passing it the email and password
and this is where things got me a little tricky because wheni tried to pass my CreateDocument Function as a callBack it throws me an error
and this is my CreateDocument
function const creatProfileDocument = (currentuser) => {
setDoc(doc(db, "users", currentuser.uid), {
email: currentuser.email,
age: false,
name: "",
})
};*/
я действительно надеюсь, что кто-нибудь сможет мне здесь помочь
Ответ №1:
Как правило, есть два способа сделать это — немедленно в вашем signUp
коде или с помощью триггера аутентификации в функциях Firebase.
В Вашем Коде Регистрации
Вы можете создать документ сразу после выполнения асинхронной signUp
функции:
async function signUp(email, password) {
// This function returns a credential which gives you the user's uid
// which you could then use to create your document
const credential = await createUserWithEmailAndPassword(auth, email, password);
const uid = credential.user.uid
// Create a new document using the uid as the document id
// or however else you want to use this
const ref = firebase.auth().collection("users").doc(uid)
await ref.set({
email,
uid
})
}
Хорошей стороной этого является то, что вы немедленно создаете документ, чтобы знать, что он там, когда ваша signUp
функция вернется. Недостатком является то, что вам необходимо ослабить некоторые правила безопасности, чтобы пользователи могли создавать документы в этой коллекции из клиента. Существует множество способов обеспечить его безопасность, но просто имейте это в виду.
С Облачными Функциями
Ваш signUp
код создает новую запись аутентификации в Firebase, и в Firebase есть функции запуска аутентификации, которые могут срабатывать при создании или удалении новой записи аутентификации.
exports.createUserDoc = functions.auth.user().onCreate((user) => {
// Your new auth record will have the uid and email on it because
// you used email as the way to create the auth record
return admin.firestore().collection("users").doc(user.uid).set({
email: user.email,
uid: user.uid
})
});
Это безопасный способ обработки данных, и вам не требуется открывать какие-либо правила безопасности. Но недостатком является то, что функции триггера не гарантируют немедленного срабатывания. Обычно они срабатывают за несколько секунд, но я видел, что это занимает 30-60 секунд. Поэтому, если ваш клиентский код нуждается в документе сразу после создания учетной записи, это нецелесообразный вариант.