Поиск…


Как сохранить данные профиля пользователя

Каждый авторизованный пользователь имеет Firebase uid пользователя , уникальный во всех поставщиков и возвращается в результате каждого метода аутентификации.

Хорошим способом хранения данных пользователя является создание узла для хранения всех данных пользователя и его защиты с использованием правил безопасности

- База данных

{
   "users": {
      "uid1" : {
         "name": "Steve",
         "surname": "Jobs"
      },
      "uid2" : {
         "name": "Bill",
         "surname": "Gates"
      }
   }
}

- Безопасность

{
    "rules": {
        "users": {
            "$uid": {
                // If node's key matches the id of the auth user
                ".write": "$uid == auth.uid"
            }
        }
    }
}

$uid в приведенных выше правилах - это так называемая «долларовая переменная», которая гарантирует, что применяемые к ней правила применяются ко всем дочерним узлам users . Для получения дополнительной информации см. Документацию по использованию переменных $ Variables для захвата сегментов пути .

Зачем сохранять данные пользователя в базе данных

Firebase Authentication позволяет пользователям вашего приложения войти в систему с социальными поставщиками или их электронной почтой + паролем. Но что, если вы хотите хранить дополнительную информацию о пользователе, помимо того, что Firebase Authentication позволяет вам указать?

Или что, если вы хотите отобразить список пользователей в вашем приложении? У Firebase Authentication нет API для этого.

Большинство разработчиков решают эту проблему, сохраняя дополнительную информацию в отдельной базе данных. В этом разделе описывается, как хранить такую ​​информацию в базе данных Firebase Realtime .

Обработка данных учетной записи пользователя в базе данных реального времени

Система auth Firebase является источником пользователей uid , displayName , photoURL и, возможно, email . Учетные записи на основе пароля устанавливают эти постоянные значения в системе auth с помощью метода .updateProfile . Сохранение этих значений в базе данных Realtime, rDB, узел users ставит проблему с устаревшими данными. Отображаемые имена, например, могут измениться. Чтобы синхронизировать эти значения, используйте локальное хранилище совместно с .onAuthStateChange .

на каждом .onAuthStateChange

  • getItem('displayName') и getItem('photoURL')
  • сравнить с user.displayName и user.photoURL
  • если разные
    • setItem('displayName') и setItem('photoURL')
    • db.ref.child('users').update photoURL значения displayName и / или photoURL

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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow