откатить постоянство в обоих документах, если одно исключение выбросить при создании нового do c? - PullRequest
0 голосов
/ 20 июня 2020

Я создаю форму регистрации для вставки данных в пользователей аутентификации firebase и дополнительных данных в документ пользователей. Ниже приведены действия для регистрации.

export const signUp = (newUser) => {
    return async(dispatch, getState, {getFirebase, getFirestore}) => {
      const firebase = getFirebase();
      const firestore = getFirestore();
      
      try{
        const {user} = await firebase.auth().createUserWithEmailAndPassword(
          newUser.email, 
          newUser.password
        );
        if(user)
        {
          const userRef = firestore.doc(`users/${user.uid}`);
          const snapshot = await userRef.get();
          if(!snapshot.exists) {
            try{
              await userRef.set({
                firstName: newUser.firstName,
                lastName: newUser.lastName,
                initials: newUser.firstName[0] + newUser.lastName[0],
                dob: newUser.dob
              })
              dispatch({ type: 'SIGNUP_SUCCESS' });
            }
            catch(err){
              throw new Error(`user creating error:${err}`)
            }
          }
          else{
            throw new Error(`Authenticate user not created`)
          }
        }
        else{
          throw new Error(`Authenticate user not able to create", error`)
        }
      }
      catch(err){
        dispatch({ type: 'SIGNUP_ERROR', err});
      }
      
  }
}

Я пытаюсь принудительно вставить данные в оба документа или в любой из них, если в какой-то момент возникнут ошибки. например, если я передал неправильное значение в const userRef, вставку в аутентификацию пользователей следует отменить, но приведенный выше код не работает.

1 Ответ

1 голос
/ 20 июня 2020

Если вы создаете учетную запись пользователя Firebase Auth, единственный способ «откатить ее» - это сделать вызов для удаления этой учетной записи с помощью User.delete () . Нет транзакций, которые могут автоматически отменять операции аутентификации. И нет способа создать единую «транзакцию», которая работает с продуктами Firebase.

Для вашего конкретного случая c, если вы хотите удалить пользователя, если запись документа не удалась, вам придется позвонить user.delete() в блоке catch для userRef.set().

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