Почему Firebase не может получить зарегистрированного пользователя в развернутой стандартной среде GAE? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть одностраничное (реагирующее + избыточное) приложение, размещенное в Google App Engine. После входа в систему, если я перехожу к любому, кроме корневого URL-адреса развернутого приложения GAE, проверка подлинности Firebase завершается неудачно. Этого не происходит, если я перехожу к корневому каталогу напрямую из другой вкладки, и при тестировании на локальном сервере dev все работает нормально, независимо от того, куда я перехожу.

Проверка подлинности в приложении выполняется из корневого метода App component componentDidMount() с помощью firebase.auth.onAuthStateChanged(authUser => {...}). Я добавил отладку, и, используя dev-сервер, я получаю authUser, где бы я ни находился. Нажав на развернутое приложение, я получаю пользователя, если перехожу к корню, и в противном случае не могу получить authUser. Firebase использует управление сеансом local по умолчанию. Вот код:

componentDidMount() {
  const { dispatches, history } = this.props;

  firebase.auth.onAuthStateChanged(authUser => {
    if (authUser) {
      authUser.getIdTokenResult().then(function(tokenInfo) {
        dispatches.signIn(authUser, tokenInfo)
      }).catch(function(error) {
        dispatches.setErrorMessage("Could not get token info; login invalidated.");
        dispatches.signOut()
        history.push(routes.LANDING);
      });
    }
    else {
      dispatches.signOut()
      history.push(routes.LANDING);
    }
  });
}

Проверка подлинности собирается: https://www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo?key=xxx

Если я различаю заголовки запроса и ответа между успешным запросом для корневого домена и некорневого URL-адреса, единственное отличие заключается в 'referer', который содержит:

И снова, на сервере dev нет проблем в любом случае.

Не уверен, насколько это актуально, но это мой раздел обработчиков из app.yaml:

handlers:
- url: /(.*\.(json|ico|js))$
  secure: always
  static_files: store-build/\1
  upload: store-build/.*\.(json|ico|js)$

- url: /static
  secure: always
  static_dir: store-build/static

- url: /api/.*
  secure: always
  script: _go_app

- url: /.*
  secure: always
  static_files: store-build/index.html
  upload: store-build/index.html

Я проверил журналы Stackdriver GAE, в которых нет ничего интересного или неожиданного. Я не нашел никаких журналов, специфичных для Firebase-auth.

Я не уверен, куда идти отсюда.

1 Ответ

0 голосов
/ 17 мая 2018

Мои ограничения для реферера были неправильно сконфигурированы из-за косой черты.

В Google Cloud Console -> API и службы -> Учетные данные -> Учетная запись службы Firebase для «Ограничения приложения» было установлено значение «HTTP Referers», и для домена хоста было задано следующее значение:

https://xxx.appspot.com/

Конечная косая черта ограничивала его этим доменом + корневым путем. Меняя его на:

https://xxx.appspot.com

Разрешенные рефереры из любой точки домена. https://xxx.appspot.com/* тоже работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...