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').updatephotoURLзначенияdisplayNameи / илиphotoURL
-
.onAuthStateChange срабатывает при каждой загрузке или перезагрузке страницы, а также при каждом изменении состояния auth. Он потенциально часто срабатывает, например, многостраничные приложения. Однако чтение и запись на локальное хранилище является синхронным и очень быстрым, поэтому заметное влияние на производительность приложения не будет.