Firebase пользовательские претензии, как установить? - PullRequest
0 голосов
/ 08 февраля 2019

Я борюсь с пользовательскими требованиями Firebase.

Я протестировал множество подходов, но ничего не работает.Очевидно, я упускаю что-то важное в самой концепции.

Так что я вернулся к корню.Этот скрипт из примера Google должен применять таможенное правило для вновь созданного пользователя

exports.processSignUp = functions.auth.user().onCreate(event => {
  const user = event.data; // The Firebase user.
  const customClaims = {
      param: true,
      accessLevel: 9
    };
  // Set custom user claims on this newly created user.
  return admin.auth().setCustomUserClaims(user.uid, customClaims)   

});

Затем на клиенте я проверяю результат с помощью

firebase.auth().currentUser.getIdTokenResult()
                .then((idTokenResult) => {
                    // Confirm the user is an Admin.
                    console.log(idTokenResult.claims)
                    if (!!idTokenResult.claims.param) {
                    // Show admin UI.
                    console.log("param")
                    } else {
                    // Show regular user UI.
                    console.log("no param")
                    }
                })
                .catch((error) => {
                    console.log(error);
                });

Все просто в необработанной копии-вставкевсе еще не работает.Я тестировал как с локальной машины (могут быть проблемы с cors?) И развернул

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Это гоночная ситуация.Если сначала функция завершится сначала, вы получите обновленные данные.

Метод getIdTokenResult принудительно обновляет, но если пользовательское утверждение не готово, оно бессмысленно.

Вам нужноустановить другую структуру управления данными, чтобы инициировать принудительное обновление для клиента.Например, слушатель в реальном времени к rtd;

root.child(`permissions/${uid}`).on..

И логика внутри слушателя будет: if the value for that node exist and is a number greater than some threshold, then trigger the user auth refresh

В течение этого времени пользовательский интерфейс может отображать состояние загрузки, если естьне является ни datasnapshot, ни представлением без прав администратора, если datasnapshot существует, но имеет более низкий уровень разрешений.

В функциях необходимо установить узел после того, как заявка установлена:

..setCustomUserClaims(..).then(
    ref.setValue(9)
);

У меня естьболее подробный пример по pastebin

0 голосов
/ 08 февраля 2019

Заявки на клиента заполняются, когда клиент получает идентификационный токен с сервера.Идентификационный токен действителен в течение часа, после чего SDK автоматически обновляет его.

К моменту вызова облачных функций auth.user().onCreate клиент уже получил токен ID для нового пользователя.Это означает, что может пройти около часа, прежде чем клиент увидит обновленные утверждения.

Если вы хотите, чтобы клиент получил пользовательские утверждения до этого, вы можете принудительно заставить его обновить токен .Но в этом видео наши эксперты по безопасности рекомендуют (что вы считаете) использовать другой механизм хранения для заявлений, которые вы хотите подать сразу.

...