firebase
Как использовать базу данных Firebase для хранения списка пользователей Firebase Authentication
Поиск…
Как сохранить данные профиля пользователя
Каждый авторизованный пользователь имеет 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. Он потенциально часто срабатывает, например, многостраничные приложения. Однако чтение и запись на локальное хранилище является синхронным и очень быстрым, поэтому заметное влияние на производительность приложения не будет.