自分のクライアントIDを設定して実行した後、ログインプロセスを実行し、ポップアップで必要なGoogleアカウントを選択します。
これを選択すると、コンソールで次のエラーが発生してログインが失敗します。
err = {error: "popup_closed_by_user"}
誰かがこれを解決するのを助けてくれますか
localhostをポートでテストする場合は、add port number
Google開発者コンソールのAuthorized JavaScript originsセクション以下のように
これで問題が解決することを願っています。
ブラウザのキャッシュをクリアしてみてください。
Chromeの場合:[設定]→[詳細設定]→閲覧データの消去→キャッシュされた画像とファイル
Angular4-social-loginを使用してログインする場合も、同じ問題に直面しました。これは、ブラウザのCookieとポップアップ設定が原因です。 IEエラーなしで動作します。Chrome設定では、Cookie設定を変更してコンテンツ設定に移動し、ポップアップを許可します。次に、キャッシュをクリアしてリロードします。アプリ。
onsuccess
メソッドがエラーをスローしないことを確認してください。
私の場合、onsuccess
メソッドのすべての失敗は、{ error: "popup_closed_by_user" }
引数でonfailure
に分類され、devtoolsコンソールにエラーメッセージは表示されませんでした。
Firebase authでも同じ問題が発生しましたが、私の場合、localhost
がすでに構成に含まれています。私のローカルIPアドレス(モバイルでのテスト用)も、承認済みドメインリストに追加する必要がありました。
スクリプト( '//apis.google.com/js/platform.js')を読み込んだ後、DOMにiframeも挿入されます。例:
<body>
...
<iframe aria-hidden="true" id="ssIFrame_google" sandbox="allow-scripts allow-same-Origin" src="https://accounts.google.com/o/oauth2/iframe#Origin=http%3A%2F%2Flocalhost%3A4200&rpcToken=902946799.4541115&clearCache=1" style="position: absolute; width: 1px; height: 1px; left: -9999px; display: none;"></iframe>
</body>
最初は、Googleがこれを行う理由が理解できなかったため、この要素を削除しました。
const iframeElem = document.getElementById('ssIFrame_google');
if (iframeElem) {
iframeElem.remove();
}
しかし、認証の成功に関する応答を処理する段階に達したとき、私はあなたによって説明されたエラーpopup_closed_by_userに直面しました。
コードをコメント化してiframeを削除したところ、サインインは成功しました。
-
ブラウザがコンテンツをフィルタリングし、このiframeを削除すると想定できます。
ポート番号を変更して、アプリを再実行してください。ポート番号を変更するには、package.json
ファイルのポート番号を更新する必要があります。
"scripts": {
"start": "set PORT=3006 && react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
}
注:ここでポート番号は3006に変更されます。
次に、npm start
を使用してアプリケーションを実行します。