Создание документа каждый раз, когда кто-то регистрируется в firebase

# #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 секунд. Поэтому, если ваш клиентский код нуждается в документе сразу после создания учетной записи, это нецелесообразный вариант.