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