# #firebase #google-cloud-functions #firebase-hosting
Вопрос:
Я уже некоторое время обслуживаю динамический контент с помощью облачной функции. Теперь я попытался изменить область облачной функции, используя region()
в построителе функций:
// Old
export const serveContent = functions
.https
.onRequest((req, res) => {...})
// New
export const serveContent = functions
.region("europe-west1")
.https
.onRequest((req, res) => {...})
Во время этого изменения я не изменял свой rewrites
в firebase.json
.
Теперь запросы больше не доходят до облачной функции (в журналах не отображаются вызовы), и мой браузер перенаправляется с 302 Found
кодом состояния на страницу, запрашивающую аутентификацию. Как я могу продолжать предоставлять контент без аутентификации?
Редактировать:
Обе облачные функции имеют Cloud Functions-Invoker
роль, установленную для allUsers
:
Ответ №1:
Запрос на аутентификацию является лишь побочным эффектом реальной проблемы. В документах указано:
Firebase Hosting поддерживает облачные функции только в США-central1.
Ответ №2:
Каждый раз, когда вы развертываете функцию в новом регионе, облачные функции будут создавать совершенно другую функцию (если не указано иное) вместо изменения предыдущей. Посмотрите здесь, как две функции с одинаковым именем, но в разных регионах работают вместе:
Таким образом, поскольку это другая функция, вам необходимо настроить управление доступом к ней. В частности, вы можете разрешить неаутентифицированный вызов для всех пользователей, но я настоятельно рекомендую вам ознакомиться с обеими документациями, поскольку это может измениться из-за ваших требований и соображений безопасности.
С другой стороны, у вас, похоже, есть опечатка в вашем коде, но я считаю, что это касается только вашего вопроса, а не вашего кода, поскольку ошибка, о которой вы сообщаете, совершенно иная. Пожалуйста, отредактируйте свой вопрос, если это так.
// Old
export const serveContent = functions
.https
.onRequest((req, res) => {...})
// New
export const serveContent = function // <- Here. It should be 'functions', not function
.region("europe-west1")
.https
.onRequest((req, res) => {...})
Комментарии:
1. Вы были правы насчет опечатки. Я соответствующим образом отредактировал вопрос.
2. Отлично! Вы пытались настроить контроль доступа, как я уже упоминал? Сработало ли это?
3. Я проверил, и для меня уже была
Cloud Functions-Invoker
добавлена рольallUsers
. Если я правильно понимаю, и это то, что вы улучшаете, это, к сожалению, не было проблемой.4. Возможно ли, что вы пытаетесь получить доступ к предыдущей функции (в предыдущем местоположении)? Проверьте, соответствует ли URL-адрес этой форме:
https://europe-west1-[PROJECT-ID].cloudfunctions.net/[FUNCTION-NAME]
с правомregion
, указанным в начале (если вы не используете пользовательский домен для размещения своей функции ).5. Я использую пользовательский домен, но перенаправление 302, отправляемое firebase hosting, фактически перенаправляет на
us-central1
домен. Оказывается, firebase hosting в настоящее время не поддерживает другие регионы.