API входа в Google. Hang with uncaught error. Не удалось получить родительское происхождение из хеша URL.
Я использую JavaScript-клиент Google Sign-In в течение нескольких месяцев без проблем. Но недавно, когда пользователь нажимал кнопку входа из веб-приложения, которое добавлялось на домашний экран, всплывающее окно входа просто зависало, не показывая никакого контента.
При отладке с помощью удаленной отладки на панели консоли отображается ошибка:
Uncaught Failed to get parent origin from URL hash!
произошел от 4188232449-v2-idpiframe.js: 136 (JavaScript загружен внутри библиотеки Google).
Я уверен, что это не ошибка программирования/конфигурации, поскольку одно и то же веб-приложение ранее работало в течение нескольких месяцев без проблем, и я не модифицировал ни один код.
Я попытался выполнить поиск Google для решения этой конкретной проблемы и просмотреть документацию Google на предмет любых недавних изменений в Google Sign-In API без какой-либо удачи.
Это ошибка в клиентской библиотеке JavaScript API Google, сбой недавнего обновления браузера Chrome для Android или есть какие-то изменения в использовании API, о которых я пока не знаю?
Используется библиотека https://apis.google.com/js/platform.js
Это init-параметр для gapi.auth2.init():
{
client_id: GAPI_CID, // defined as constant
cookiepolicy: 'single_host_origin',
prompt: 'select_account',
ux_mode: 'popup',
fetch_basic_profile: true
}
Любое понимание будет высоко ценится. Спасибо.
PS: эта проблема отличается от Uncaught Failed для получения родительского источника из хэша URL, поскольку в этом случае проблема вызвана неправильной настройкой необходимых учетных данных в консоли API Google. Если вам никогда не удавалось интегрировать поток входа в свое приложение, возможно, ответ из этого поста может вам помочь.
В противном случае, если в течение некоторого времени вы успешно интегрировали поток входа в систему, но в последнее время проблема внезапно/ошибочно появляется с появлением пустого экрана в всплывающем окне, то у вас возникла такая же проблема со мной.
Ответы
Ответ 1
Я могу подтвердить, что мы испытываем те же проблемы в моей компании с недавних пор. Это кажется немного неустойчивым, а не в 100% случаев. Но для некоторых пользователей некоторое время они встречаются с пустым всплывающим окном с URL-адресом, указывающим на " https://accounts.google.com/o/oauth2/iframe ", но ничего не происходит.
Ответ 2
Не полный ответ, но это может быть разумным обходным решением для некоторых. Я обновил ux_mode
чтобы использовать redirect
и теперь он частично работает.
auth2 = gapi.auth2.init({
client_id: '1234.apps.googleusercontent.com',
scope: 'profile email',
ux_mode: 'redirect',
redirect_uri: 'https://blahblah.io/oauth2callback'
})
ПРИМЕЧАНИЕ. Кажется, redirect_uri
требуется, в отличие от документов Google. Это не идеальная замена, но она решает "URL-адрес хеша!". ошибка
Это сообщение в блоге и Git Repo в нем также может быть полезно для тех, кто пытается использовать redirect
Ответ 3
По этой же причине мое электронное приложение сегодня провалилось. Отладка довольно много, и я думаю, что нашел причину, но не знаю, как ее решить, почему это произошло, или если это электрон или ошибка Google.
В моем электронном приложении у меня есть 2 webviews
, один для основного контента и еще один для всплывающих диалоговых окон google.
Поэтому, когда Google нужно открыть аутентификацию, он генерирует этот IFRAME:
<iframe id="ssIFrame_google"
sandbox="allow-scripts allow-same-origin" aria-hidden="true"
src="https://accounts.google.com/o/oauth2/iframe#origin=https%3A%2F%2Fxxxx.com&rpcToken=dxxd318480305.4777704"
style="... display: none;"></iframe>
Имейте в виду, что URL имеет параметры HASH: ваше происхождение и токен.
Однако, когда на электронной стороне я захватываю событие нового окна, чтобы открыть URL-адрес сам в другом веб-просмотре, событие я получаю LACKS хеш-параметры:
event {
type : "new-window",
url:"https://accounts.google.com/o/oauth2/iframe",
.
.
}
Так что о том, что google iframe жалуется (я отлаживал его), является именно тем, что он не может найти параметры origin
и rpctoken
которые должны быть в хэш-параметрах.
По какой-то причине я не понимаю (я не обновил электрон), событие new-window
больше не получает полный URL-адрес.
Используя @howMuchCheeseIsTooMuchCheese ответ ниже, я изменил поток, чтобы использовать обратный вызов перенаправления, а затем сам захватил этот обратный вызов и перезапустил приложение. Это не идеально, но, по крайней мере, я могу войти в свои приложения.