У меня есть одностраничное (реагирующее + избыточное) приложение, размещенное в 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.
Я не уверен, куда идти отсюда.