Запуск приложения Ionic в качестве PWA на хостинге Firebase - PullRequest
0 голосов
/ 20 октября 2018

ОБЩАЯ ИНФОРМАЦИЯ

У нас есть большое приложение Ionic v1, которое работает на Android (приобретая его в Google Play Store), а также на наших машинах для разработки через "ionic serve".

Приложение использует веб-сайт Google App Engine (GAE) в качестве внутреннего сервера.Сервер поддерживает сеансы для каждого пользователя с помощью файла cookie.Мы не храним много данных в сеансе, но нам нужно надежно идентифицировать пользователя, выполняющего каждый запрос.Когда приложение работает успешно, код сервера GAE создает файл cookie, содержащий идентификатор сеанса, и отправляет его в код ионного клиента при ответе на каждый запрос HTTP.

Обратите внимание, что код Ionic никоим образом не обращается к cookie.Необходимо только, чтобы один и тот же файл cookie отправлялся обратно на сервер GAE при каждом последующем запросе, чтобы код GAE распознавал пользователя.

ЦЕЛЬ

Мы хотели бы предоставить ионный кодс помощью Firebase Hosting.Фактически мы можем сделать это в обоих режимах:

a.Сохранение кода Ionic на нашей машине разработчика, запуск «firebase serve» и переход к «localhost: 5000» в браузере

b.Развертывание Ionic-кода на хосте Firebase и переход на "xxxx.firebaseapp.com" в браузере

Все работает! Э-э, за исключением одной мелочи,которую мы пытались решить в течение нескольких недель ...

ПРОБЛЕМА

Файл cookie, используемый кодом GAE для управления непрерывностью сеанса и отправляемый в ответах на запросы HTTP, сгенерированные GAEкод, не возвращается в следующем запросе от приложения Ionic, работающего на Firebase.Таким образом, приложение GAE всегда отвечает, как если бы пользователь еще не вошел в систему.

Фактически, дальнейшее тестирование показывает, что cookie-файл сеанса, отправляемый в ответах на запросы HTTP, даже не устанавливается в браузере (поэтому, конечно,он не отправляется обратно в код GAE со следующим HTTP-запросом).Код GAE на внутреннем сервере всегда отвечает, как если бы это был первый HTTP-запрос сеанса.

ЧТО МЫ УДАЛЕНЫ

  • Проблема не в этомчто Ionic не поддерживает куки.Мы знаем, что это не проблема, потому что приложение прекрасно работает как приложение для Android, а также через «ионную подачу».В обоих случаях бэкэнд GAE может поддерживать сеансы с помощью файла cookie для хранения идентификатора сеанса от одного запроса к следующему.

  • Проблема не решается с помощью «memcache»вместо файлов cookie для поддержки сеанса GAE, потому что даже если вы используете memcache, вам все равно нужен файл cookie для идентификатора сеанса.При желании вы можете использовать настройки по умолчанию и разрешить поддержке сеанса GAE использовать файлы cookie;в этом случае он будет использовать один и тот же файл cookie как для идентификатора сеанса, так и для любых других данных сеанса.

  • Проблема не решается путем использования «__session» в качестве имени файла cookie,Firebase фактически поддерживает использование такого имени файла cookie, но, по-видимому, только в контексте запуска Firebase Hosting с облачными функциями.Облачные функции предназначены для запуска внутреннего кода, а не клиентского кода, с которым взаимодействует пользователь.Мы не могли увидеть способ заставить приложение Ionic работать как облачную функцию.А без облачных функций cookie-файл «__session», установленный бэкэндом GAE, очевидно, удаляется клиентом браузера, на котором запущено приложение, вместе со всеми другими cookie-файлами.

  • Добавление «Access-Control-Заголовки Allow-Origin / -Credentials / -Methods / -Headers "для ответа, генерируемого GAE-кодом, и установка crossDomain: true xhrFields: { withCredentials: true } на стороне клиента не улучшают ситуацию.Тем не менее, в браузере не устанавливается cookie из кода GAE.

Любая помощь будет наиболее ценной.

...