Google Sign-In API Hang with uncaught error Не удалось получить родительский источник из хэша URL - PullRequest
0 голосов
/ 09 октября 2018

Я использую JavaScript-клиент Google для входа в течение нескольких месяцев без проблем.Но недавно, когда пользователь нажимает кнопку входа из веб-приложения, которое добавляется на домашний экран, всплывающее окно входа просто зависает, не показывая никакого содержимого.

При отладке с помощью удаленной отладки на панели консоли отображается ошибка:

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 Не удалось получить родительский источник из хэша URL , поскольку в этом случае проблема вызвана неправильной настройкой необходимых учетных данных в консоли Google API.Если вам никогда не удавалось интегрировать поток входа в свое приложение, возможно, ответ из этого поста может вам помочь.

В противном случае, если у вас был успешный интегрированный поток входа для некоторыхвремя, но недавно проблема внезапно / беспорядочно появляется с признаком пустого экрана в всплывающем окне, чем у вас такая же проблема со мной.

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Мое электронное приложение сегодня перестало работать по той же причине.Я довольно много отлаживал, и я думаю, что нашел причину, но не знаю, как ее решить, почему это произошло, или это ошибка электрона или 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&amp;rpcToken=dxxd318480305.4777704" 
                style="... display: none;"></iframe>

Имейте в виду, чтоURL имеет параметры HASH: ваше происхождение и токен.

Однако, когда на стороне электронов я фиксирую событие нового окна, чтобы сам открыть URL в другом веб-просмотре, событие, которое я получаюОТСУТСТВУЕТ хеш-параметры:

event { 
  type : "new-window",
  url:"https://accounts.google.com/o/oauth2/iframe",
  .
  .
}

Итак, на что жалуется iframe от Google (я его отладил), так это то, что он не может найти параметры origin и rpctoken , которые должны быть впараметры хэша .

По причине, по которой я не понимаю (я не обновил электрон) событие new-window больше не получает полный URL.

Используя ответ @howMuchCheeseIsTooMuchCheese ниже, я изменил поток для использования обратного вызова перенаправления, затем сам перехватил этот обратный вызов и перезапустил приложение.Это не идеально, но по крайней мере я могу войти в свои приложения.

0 голосов
/ 13 октября 2018

Пока еще не полный ответ, но для некоторых это может быть разумным решением.Я обновил 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 в нем также могут быть полезны всем, кто пытается использовать redirect

0 голосов
/ 09 октября 2018

Я могу подтвердить, что в моей компании с недавних пор возникают такие же проблемы.Это кажется немного странным, не в 100% случаев.Но для некоторых пользователей иногда появляется пустое всплывающее окно с URL-адресом, указывающим на «https://accounts.google.com/o/oauth2/iframe", но ничего не происходит.

...