Сохранить данные в пользовательский объект Firebase - PullRequest
1 голос
/ 16 марта 2020

Используя это:

firebase.auth().onAuthStateChanged(function(user){
    if (user){

Firebase возвращает пользователя, включая userID. Когда веб-страница получает этот объект, ему требуется идентификатор пользователя и необходимо снова получить доступ к записям БД, чтобы проверить некоторые очень простые вещи (если это платный пользователь или другой простой ключ), чтобы выбрать пользовательский интерфейс.

Есть ли возможность вернуть в этом обратном вызове пользователя, включающего некоторую предопределенную информацию о нем c?

1 Ответ

3 голосов
/ 16 марта 2020

Если вы хотите добавить дополнительную информацию в учетную запись пользователя, вы не можете использовать объект 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 байт, приведет к ошибке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...