не удается обновить электронную почту пользователя

#javascript #firebase #react-native #firebase-authentication

#javascript #firebase #react-native #firebase-аутентификация

Вопрос:

Я пытаюсь обновить электронную почту текущего пользователя, я зашел в документацию и скопировал приведенный там пример кода, но ничего не сработало, это из документа не сработало

 var user = firebase.auth().currentUser;

user.updateEmail("newemail@example.com").then(function() {
  console.log('success')
}).catch(function(error) {
  console.log('failed')
});
  

Я также пытался :

  try {

   await user.updateEmail('test@test.com').then(function() {
     console.log('success')           
   }).catch(function(error) {
     handleErrors(dispatch, error.message);
   });

 } catch(e) {
   handleErrors(dispatch, e.message);
 }
  

не могли бы вы помочь решить эту проблему?

Обновить :

извините, я не включил точную ошибку, которая выводится в консоли, вот ошибка :

Эта операция конфиденциальна и требует недавней аутентификации. Войдите в систему еще раз, прежде чем повторить этот запрос.

2) Я должен добавить, что я использую asyncstorage из react native, и я сохраняю этот элемент (профиль пользователя => электронная почта, имя и т.д.) в reduxPersist

вот как выглядит мой код входа :

 export const login = ( email, password ) => {

        return async (dispatch) => {

            dispatch({ type: ATTEMPTING });
           try { 
            await firebase.auth().signInWithEmailAndPassword(email, password)
                .then(resp => handleLoginSuccess(dispatch, resp.uid,resp.name,email))
                .catch(error => handleErrorLogin(dispatch, error.message));
           }catch(e){
            handleErrorLogin(dispatch, e.message);
           }
        };

    };


  const handleLoginSuccess = async(dispatch , userId,name,email) => {

       try{
        const profile = { userId, name, email  };
        await AsyncStorage.setItem('userProfile', JSON.stringify(profile));
        dispatch({ type: LOGIN_SUCCESS, payload: profile });
       }catch(e){
            alert(e.message);
       }

     }
  

Комментарии:

1. Пожалуйста, добавьте больше информации, например, что вы подразумеваете под «не сработало» и любыми полученными ошибками. Пожалуйста, учтите, что мы не можем видеть то, что видите вы, вам нужно сообщить нам, чтобы мы могли разобраться в проблеме.

2. Можете ли вы добавить код, в котором вы входите в firebase, перед изменением электронной почты?

3. Получаете ли вы что-нибудь, если выполняете console.log(user) после изменения user = firebase.auth().CurrentUser;

4. да, он показывает данные, есть пользователь

Ответ №1:

Сообщение об ошибке сообщает вам, что во время вашего вызова ни один пользователь не входил в систему updateEmail . SDK не знает, какого пользователя вы пытаетесь изменить. Вам нужно будет дождаться полного завершения входа в систему, прежде чем вызывать этот метод.

Обратите внимание, что все API Firebase являются асинхронными, поэтому вам нужно будет использовать возвращаемые ими обещания, чтобы убедиться, что порядок вызовов верен.