Можно ли «перехватить» запрос на обслуживание PWA с облачного хостинга Google с облачными функциями? - PullRequest
1 голос
/ 08 ноября 2019

Я использую стартовый комплект PWA https://pwa -starter-kit.polymer-project.org / для создания веб-сайтов. Я размещаю сайты в Google App Engine, потому что его очень легко размещать и доставлять шаблон PRPL прямо из коробки https://pwa -starter-kit.polymer-project.org / building-and-deploying # building-for-prpl-server .

Однако в моем новом проекте я использую отдельный поддомен для каждого клиента. И у каждого клиента будет свой идентификатор клиента в моей базе данных Firebase. У меня вопрос: могу ли я перехватить запрос http для PWA с помощью облачной функции и получить идентификатор клиента для клиента из моей базы данных на основе запрошенного субдомена?

В прошлом, когда я размещал все с firebase (функции и хостинг) Я смог добавить это в firebase.json, чтобы перенаправить http-запрос для PWA в функцию firebase, которую я назвал "renderApp"

"rewrites": [
  {
    "source": "**",
    "function": "renderApp"
  }

Как мне добиться такого же эффекта при использованииGoogle App Engine для размещения моего PWA? Я предполагаю, что есть что-то, но так как у меня больше нет firebase.json, я не уверен, как это сделать.

Короче говоря;Я хотел бы, чтобы идентификатор арендатора запекался в моем PWA, когда я отправляю его клиенту, но мне нужно сначала найти свой идентификатор арендатора, расположенный в моей базе данных firebase (на основе субдомена из запроса http)

1 Ответ

0 голосов
/ 09 ноября 2019

Отказ от ответственности: у меня есть для вас ответ, но в конце этого ответа также есть предупреждение.

Сначала убедитесь, что вы настроили *.example.com как собственный поддомен в App Engine, и*.example.com настроен как CNAME с вашим провайдером DNS. Это направит все запросы к TENANT.example.com к вашему приложению. (Я предполагаю, что поддомен представляет ваш идентификатор клиента).

В вашем приложении вы можете извлечь поддомен из заголовка Host. В nodejs это будет выглядеть примерно так:

const host = req.get('Host');
const [ tenant, ] = host.split('.');

Это решит вашу проблему, но имейте в виду, что вы действительно хотите отличить tenant_id только от аутентифицированного пользователя. Вы можете интегрировать Identity-Aware Proxy или специальное решение для аутентификации. Полагаться только на поддомен - это несколько надуманный метод для достижения того, что, как я думаю, вы пытаетесь сделать, и позволяет любому клиенту обнаруживать недостатки, которые могут обеспечить доступ к данным других арендаторов. Убедитесь, что вы используете субдомен только для косметических целей, с белой маркировкой, а не как часть стратегии аутентификации.

См. Также:

...