2017-01-17 3 views
2

Google OAuth2を実装しようとしています。https://github.com/google/google-api-nodejs-client#authorizing-and-authenticatingを参考にしてください。私は、ブラウザのコンソールでこのエラーを取得し、このGoogle OAuth2:CORSポリシーでリダイレクトがブロックされました:リクエストにはプリフライトが必要です。クロスオリジンリダイレクトに従うことはできません。

var url = oauth2Client.generateAuthUrl({ 
    access_type: 'offline', 
    scope: some_scope 
    }); 
res.redirect(url); 

のようなページを同意するようにユーザーをリダイレクトする場合(リンク編集):8080/myPageName:

XMLHttpRequestがローカルホストをロードすることはできません。 localhost:8080/myPageNameからaccounts.google.com/o/oauth2/auth?access_type = ...へのリダイレクトはCORSポリシーによってブロックされました:リクエストにはプリフライトが必要ですが、クロスオリジンのリダイレクトは許可されていません。

奇妙なことは、GUIからのフローを実行するときだけ(ユーザーがボタンを押す、angular2フロントエンド)、このエラーが発生しているということです。 localhost:8080/myPageNameをブラウザのアドレスバーに直接入力すると、すべてがうまく動作します(同意したフォームとトークンを取得します)。

何か助けていただければ幸いです。ありがとうございました。

+0

私は同じ問題を抱えています:(Java Springアプリケーションからやっていますが、同じ動作をしています)パスを直接入力すると、アカウントなどのプロンプトが表示されます。 – trojanc

+0

http://stackoverflow.com/この問題を回避する方法の詳細については、質問/ 34949492/cors-request-with-preflight-and-redirect-disallowed-workarounds/39728229#39728229を参照してください。仕様の変更に合わせて実装を更新します。 – sideshowbarker

答えて

1

私は同じ問題がありました(反応フロントエンドでは同じですが)。 これはおそらく、サーバからリダイレクトを使用してCORSをトリガする(サーバから許可していても)ためです。

リダイレクトURLを他の方法でフロントエンドに返す必要があります。フロントエンドアプリケーションからリダイレクトURLを取得し、呼び出す必要があります。

0

単純な解決策は、必要なクエリパラメータとの間に隠れたリンクを作成し、JavaScriptを使用してリンクをクリックすることです.HTTP POSTの送信をサポートしている場合は、JavaScriptの魔法を使用して、私はすでに削除されているか、近い将来に削除されると思います。

関連する問題