のためにサインインフローを使用しています
またはカールで、それは正常に動作します。 、ウェブのサインインについては
var data = {
client_id: '<my cliendId>',
scope: 'email'
};
var r = new XMLHttpRequest();
r.open('POST', 'https://accounts.google.com/o/oauth2/device/code', true);
r.setRequestHeader("Content-type", "application/json");
r.onreadystatechange = function() {
if (r.readyState === XMLHttpRequest.DONE) {
if (r.status === 200) {
console.log('hooray!');
}
else {
console.log('oh no');
}
}
};
r.send(JSON.stringify(data));
、Googleのページにユーザーをリダイレクトする必要がある。ここでは
XMLHttpRequest cannot load https ://accounts.google.com/o/oauth2/device/code. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http: //localhost:81' is therefore not allowed access. The response had HTTP status code 400.
が私のコードです:しかし、私のブラウザでは、私はこのCORSエラーを取得していますCORSの問題を回避します。しかし、TV /デバイスへのサインインでは、自分のコンピュータにアクセスして許可を得るために、コードを表示してユーザーに表示する必要があります。
なお、このコードはiframe内にあります。私はiframeの外でそれをテストし、同じ問題がありました。
私はsetRequestHeaderを更新UPDATE 'r.setRequestHeader( "コンテンツタイプ"、 "アプリケーション/ x-www-form-urlencodedで");' に送信し、 "r.send(" client_id = & scope = email ");"に送信します。
- コンソールログは、「HTTPS を私に言っている://accounts.google.com/o/oauth2/device/codeをなし 『アクセス制御 - 許可 - 起源』ヘッダーが要求に存在している 。リソース。起源「http://localhost:81」がゆえ のアクセスが許可されていません。」、
- デベロッパーツールのネットワークタブが(レスポンスでまだ何も)200 =ステータスコードを示していない、
- しかし、私はr.statusをチェックするコードで私は状態= 0を見ている。
javascriptでTV /デバイス用のGoogleログインを使用する例は誰にも見えますか?
* "レスポンスにはHTTPステータスコード400が含まれています。" *は不正なリクエストを意味し、通常、サーバーは予期しない形式でリクエストを受信したことを示します。だからあなたはおそらく、正しいContent-Typeヘッダーを送信しているかどうか確認したいと思っていますか?そのPOSTで送信しているペイロードがJSONデータの場合は、おそらく質問のコードが実行していない「Content-Type:application/json」リクエストヘッダーを送信したいと思われます。 – sideshowbarker
'r.setRequestHeader( "Content-type"、 "application/json");'を追加しました。 (上に記載されています)、私のエラーは「XMLHttpRequestはhttps://accounts.google.com/o/oauth2/device/codeをロードできません」プリフライト要求に対する応答でアクセス制御チェックが成功しません: 「http:// localhost:81」の発信元はアクセスが許可されていないため、応答にHTTPステータスコード405があります。このサインインフローでは、発信元からのリクエストが許可されません。 –
* "レスポンスにはHTTPステータスコード405があります。" *プリフライトオプションの*は、サーバがOPTIONSをまったく許可しないことを意味します。これまでのところ、*「このログインフローでは発信元からのリクエストが許可されないことは間違いありません」*、そのことは、「https://accounts.google.com/o/」ですoauth2/... 'は、ブラウザ*で動作するフロントエンドJSコード(XHRまたはFetch API)による*呼び出しからのクロスオリジン要求を非常に意図的に許可しません。代わりに、サポートされているフローがドキュメントに記載されています。代わりに使用する予定です。彼らのドキュメントにXHRまたはFetchでの使用例がないのは間違いありません。 – sideshowbarker