web-dev-qa-db-ja.com

不明なエラーでGoogleサインインAPIがハングし、URLハッシュから親Originを取得できませんでした

GoogleサインインJavaScriptクライアントを何ヶ月も問題なく使用しています。しかし最近、ユーザーがホーム画面に追加されたWebアプリからサインインボタンをタップすると、コンテンツが表示されずにサインインポップアップがハングします。

リモートデバッグでデバッグすると、コンソールペインにエラーが表示されます。

Uncaught Failed to get parent Origin from URL hash!

4188232449-v2-idpiframe.js:136(Googleライブラリによって内部的に読み込まれたJavaScript)から発信されました。

同じwebappが以前に何ヶ月も問題なく動作していたため、プログラミング/構成エラーではなく、コードを変更していません。

私はこの特定の問題をグーグル検索してみましたが、GoogleサインインAPIの最近の変更について、運が悪ければGoogleのドキュメントを閲覧しました。

Google API JavaScriptクライアントライブラリのバグ、最近のChromeブラウザのAndroidアップデート)の不具合、またはAPIの使用方法にまだ気付いていない変更がありますか?

使用されるライブラリは https://apis.google.com/js/platform.js

これは、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:この問題は RLハッシュから親Originを取得できませんでした とは異なります。その場合、問題は必要な資格情報の設定ミスが原因ですGoogle APIコンソールで。サインインフローとアプリの統合に成功したことがない場合は、おそらくその投稿からの回答が役立つでしょう。

それ以外の場合、あなたがしばらくの間統合されたサインインフローに成功したが、最近の問題が突然/不規則に発生した場合私と同じ問題があるよりも、ポップアップウィンドウに空白の画面の症状があります。

19
Athelstone

最近、会社でも同じ問題が発生していることを確認できました。 100%の確率ではなく、少し不安定なようです。しかし、一部のユーザーにとっては、「 https://accounts.google.com/o/oauth2/iframe 」を指すURLが付いた空のサインインポップアップが表示されることがありますが、何も起こりません。

5
sniii

まだ完全な答えではありませんが、これは一部の人にとっては合理的な回避策になるかもしれません。 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'
})

注:Googleのドキュメントとは異なり、redirect_uriが必要なようです。これは完全なドロップイン置換ではありませんが、「URLハッシュ」を解決します。エラー

この ブログ投稿 とその中のGitリポジトリは、redirectを使用しようとする人にも役立つ可能性があります

私のelectronアプリは、同じ理由で今日失敗し始めました。かなりデバッグしていて、理由を見つけたと思いますが、それを解決する方法、なぜそれが起こったのか、あるいはそれが電子またはグーグルのせいなのかわかりません。

Electronアプリには2つのwebviewsがあり、1つはメインコンテンツ用、もう1つは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>

RLにHASHパラメータが含まれていることに注意してください:オリジンとトークン。

ただし、electron側で別のWebビューで自分でURLを開くために新しいウィンドウイベントをキャプチャすると、受け取ったイベントはハッシュパラメータをLACKSします。

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

したがって、Googleのiframeが不満を持っているのは(デバッグしました)、Originおよびrpctokenパラメータが見つからないということですハッシュパラメータにある必要があります

理由がわからない(電子を更新していない)new-windowイベントは完全なURLを受け取りません。

以下の@howMuchCheeseIsTooMuchCheese回答を使用して、リダイレクトコールバックを使用するようにフローを変更し、そのコールバックを自分でキャプチャしてアプリケーションを再起動しました。理想的ではありませんが、少なくとも自分のアプリケーションにログインできます。

2
rupps