Firestore Custom Claim не обновляет интерфейс - PullRequest
0 голосов
/ 27 февраля 2020

Я защищаю свои маршруты, используя пользовательские утверждения, которые создаются при регистрации нового пользователя.

allow read, write: if resource.data.ownerId == request.auth.uid;

Однако, когда новый пользователь регистрируется, он не обновляет пользовательские утверждения для пользовательского интерфейса! Это означает, что новый пользователь не сможет получить доступ к контенту, если он не выйдет из системы и снова не войдет в систему, что является НАИБОЛЕЕ НЕПРАВИЛЬНЫМ опытом.

В документации команда Firebase говорит, что может принудительно обновить пользовательский интерфейс с помощью этого:

const metadataRef = admin.database().ref("metadata/" + user.uid);
return metadataRef.set({refreshTime: new Date().getTime()});

https://firebase.google.com/docs/auth/admin/custom-claims

Я следовал коду в обоих фронт / бэкэнд, но я понял, что этот код работает только с БД в реальном времени, не с Firestore . В документации нет кода для принудительного обновления пользовательского интерфейса с помощью firestore - и все мои попытки провалились.

Есть идеи?

1 Ответ

0 голосов
/ 27 февраля 2020

Чтобы обновить sh токен в JavaScript клиенте , вы делаете:

user.getIdToken(true)

Для всех других платформ существуют эквивалентные вызовы, если ваш клиент работает на этих , Но независимо от платформы вам нужно будет сделать этот вызов, чтобы обновить sh токен пользователя, чтобы он принимал новое / обновленное утверждение.

Это полностью зависит от любой другой функции Firebase, поэтому он не зависит ни от базы данных реального времени, ни от Firestore.


Код JavaScript, которым вы поделились, не обновляет sh пользовательских утверждений в клиенте, но предназначен для запуска на работе доверенная среда, в которой вы устанавливаете пользовательскую заявку. Код просто помечает в базе данных реального времени, когда профиль пользователя обновлялся в последний раз.

Затем вы запускаете на клиенте другой фрагмент кода, который прослушивает значение этой базы данных и вынуждает клиента обновить * 1023. * идентификационный токен пользователя, если флаг базы данных изменяется.

Этот код находится на той же странице документации, которую вы опубликовали в разделе Реализация на стороне клиента (JavaScript) .

...