Firebase (web) - добавить данные пользователя при регистрации - PullRequest
0 голосов
/ 15 апреля 2020

У меня возникли проблемы со следующим случаем:

Я использую функцию входа в систему электронной почты в Firebase Auth. Все отлично работает Однако, как часть формы регистрации, есть поле имени пользователя. Когда форма отправляется, выполняется следующее действие:

const response = await auth.createUserWithEmailAndPassword(email, password);
await response.user?.updateProfile({
   displayName: name
});

Это корректно обновляет профиль пользователя с отображаемым именем. Проблема в том, что сразу после завершения createUserWithEmailAndPassword запускается onAuthStateChanged, и это единственное место, где пользователь контролируется в локальном состоянии приложения. Однако после выполнения обратного вызова отображаемое имя все еще не известно, и это приводит к тому, что первый рендер приложения после регистрации не узнает имя пользователя. Если страница обновится, появится имя, так как оно теперь сохраняется.

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

Кто-нибудь из вас решил, что эта проблема лучше?

Спасибо!

Редактировать: Я также нашел метод в auth, который называется updateCurrentUser и я попытался позвонить после завершения обновления профиля. Это, однако, не вызывает onAuthStateChanged, как указано в документации.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Обновление профиля пользователя не приводит к запуску каких-либо обратных вызовов слушателя состояния авторизации. Прослушиватели вызываются только тогда, когда пользователь недавно вошел в систему или вышел из нее с момента последнего вызова прослушивателя. Если вам необходимо перезагрузить профиль пользователя после обновления, вы можете вызвать reload () для объекта пользователя.

0 голосов
/ 15 апреля 2020

Я думаю, вы могли бы попробовать это

firebase.auth().createUserWithEmailAndPassword(email, password).then(function(user) {
    var user = firebase.auth().currentUser;
    user.updateProfile({
        displayName: name
    }).then( ()=>  {
        alert(user.displayName + " " + user.email);
    })   
});

Редактировать 1:

  1. Я забыл ")" в конце
  2. добавить .then, чтобы показать предупреждает, что user обновлен. Примечание: в целях тестирования отключите мой firebase.auth().onAuthStateChanged(..), чтобы он не перенаправлялся, и alert покажет

Редактировать 2: Nvm проблема с onAuthStateChanged, он не будет обновляться

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