GoogleドライブAPIにアクセスするためにAngular JSでDjangoを使用しています。 Googleのthis文書に従っています。 FLOW.step1_get_authorize_url()
は、このページに記載されているサンプルURLに類似したURLを私に提供します。しかし、問題は、return HttpResponseRedirect(authorize_url)
の後、ブラウザはauthorize_url
にリダイレクトせず、下の図(Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8000' is therefore not allowed access. The response had HTTP status code 405
)のようにエラーを出します。ステータスコード405 google oauth2を使用しています
しかし、私はURLを貼り付けコピーした場合、それが正常に動作します。
oauth2関数は次のようになります。
def index(request):
FLOW = flow_from_clientsecrets(
settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON,
scope='https://www.googleapis.com/auth/drive',
redirect_uri='http://127.0.0.1:8000/oauth2callback/'
)
FLOW.params['access_type'] = 'offline'
authorize_url = FLOW.step1_get_authorize_url()
return HttpResponseRedirect(authorize_url)
次に、oauth2callback関数を示します。
def auth_return(request):
credential = FLOW.step2_exchange(request.GET)
return HttpResponseRedirect("/mycustomurl")
thisを使用して、Djangoサーバー側でCORSを有効にしました。ここにoauth2への呼び出しを行うAngularのサービスの私の部分です。
(function() {
'use strict';
angular.module('myApp')
.service('myService', function ($http) {
this.saveToDrive = function (startYear, endYear, shape) {
var config = {
params: {
start: '1999',
end: '2002',
action: 'download-to-drive'
},
headers: {
'Access-Control-Allow-Origin': '*',
'X-Requested-With': null
}
}
var promise = $http.get('/oauth2/', config)
.then(function (response) {
return response.data;
});
return promise;
};
});
})();
私はここで何が欠けているかお勧めします。どんな助けや提案も高く評価されます。
'CORS_ORIGIN_ALLOW_ALL = True'または' CORS_ORIGIN_WHITELIST =( '127.0.0.1:8000'、) 'を' settings'に追加しましたか? –
doc(https://docs.djangoproject.com/en/1.11/ref/settings/#allowed-hosts)によると - DEBUGがTrueでALLOWED_HOSTSが空の場合、ホストは[localhost '、' 127.0 .0.1 '、' [:: 1] ']。 DEBUGをTrueに設定しました。 –
私はそのコメントを削除しました。私はそれを求めることを意味しませんでした。更新されたものをご覧ください。 –