Если вы хотите добавить дополнительную информацию в учетную запись пользователя, вы не можете использовать объект User
, который имеет фиксированный список свойств.
Существует два классических подхода:
1. Создайте спецификацию c Запись пользователя
Вы создаете документ Firestore (или узел базы данных в реальном времени) для каждого пользователя. Обычно вы используете uid пользователя в качестве идентификатора узла Firestore Document / RTDB.
Это означает, что вам нужно будет извлечь базу данных, чтобы получить эту дополнительную информацию о пользователе, например,
firebase.auth().onAuthStateChanged(function(user){
if (user) {
firebase.firestore().collection('users').doc(user.uid).get()
.then(...)
}
//...
}
2. Используйте пользовательские утверждения
Если вам нужно хранить только ограниченное количество дополнительной информации в для обеспечения контроля доступа , вы можете использовать Пользовательские утверждения . Это особенно приспособлено для хранения пользовательских ролей, например, платного пользователя.
Пользовательские утверждения пользователя доступны через токены аутентификации пользователя, поэтому их можно использовать для изменения пользовательского интерфейса клиента в зависимости от роли пользователя или уровня доступа. Подробнее здесь в do c.
Чтобы получить претензии в интерфейсе, вы можете сделать следующее:
firebase.auth().onAuthStateChanged(function (user) {
if (user) {
user.getIdTokenResult()
.then((idTokenResult) => {
// Confirm the user is a paid user.
if (!!idTokenResult.claims.paidUser) {
// Show admin UI.
showPaidUserUI();
} else {
// Show regular user UI.
showRegularUI();
}
})
.catch((error) => {
console.log(error);
});
}
//...
}
Важно отметить следующий раздел в do c :
Пользовательские утверждения используются только для контроля доступа. Они не предназначены для хранения дополнительных данных (например, профиля и других пользовательских данных). Хотя это может показаться удобным механизмом для этого, настоятельно не рекомендуется, поскольку эти утверждения хранятся в токене ID и могут вызвать проблемы с производительностью, поскольку все аутентифицированные запросы всегда содержат токен Firebase ID, соответствующий вошедшему в систему пользователю.
- Использование пользовательских утверждений для хранения данных только для контроля доступа пользователей. Все остальные данные должны храниться отдельно через базу данных в режиме реального времени или другое хранилище на стороне сервера.
- Размер пользовательских утверждений ограничен. Передача пользовательской полезной нагрузки утверждений, превышающей 1000 байт, приведет к ошибке.