3

Python EVE フレームワークを使用して API を作成しました。AngularJS アプリから API にアクセスしようとすると、次のようなエラーが表示されます。

XMLHttpRequest cannot load http://127.0.0.1:5000/user/jay3dec. Request header field Authorization is not allowed by Access-Control-Allow-Headers. 

上記のエラーを修正するために、settings.py に以下を追加しました。

X_DOMAINS = '*'
X_HEADERS = 'Authorization'

上記のエラーは消え、新しいエラーがコンソールに表示されます:

XMLHttpRequest cannot load http://127.0.0.1:5000/user/jay3dec. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access. 

しかし、すでにX_DOMAINS = '*'settings.py に追加しています。

angularjs コードは次のとおりです。

    $scope.validate = function() {

    var encodedUserNameAndPassword = Base64.encode($scope.username + ':' + $scope.password);

    $http.defaults.headers.put = {
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
        'Access-Control-Allow-Headers': '*'
    };
    $http.defaults.headers.common['Authorization'] = 'Basic ' + encodedUserNameAndPassword;

    $http({
        method: 'GET',
        url: 'http://127.0.0.1:5000/user/jay3dec'
    }).
    success(function(data, status, headers, config) {
        console.log(data);
    }).
    error(function(data, status, headers, config) {
        alert(data);

    });
}

問題の可能性があるものを特定できますか

4

5 に答える 5

4

FWIW、同様の問題がありました。

その後、スキーマで定義された API のみが X_DOMAINS ヘッダーの影響を受けることを知りました。X_DOMAINSヘッダーの影響app = Eve(settings=blah)@app.route()受けません。したがって、その場合は、独自のデコレータを作成する必要があります。

于 2015-08-17T18:48:00.303 に答える
3

eve を次のように構成する必要があります。

X_DOMAINS = '*'
X_HEADERS = ['Authorization','Content-type']
and angular as 
$http.defaults.headers.common['Authorization'] = 'Basic ' + auth;

それは私の仕事です。

于 2016-09-30T09:19:11.357 に答える
0

また、AngularJS アプリで CORS を有効にする必要があります

var myApp = angular.module('myApp', [
    'myAppApiService']);

myApp.config(['$httpProvider', function($httpProvider) {
        $httpProvider.defaults.useXDomain = true;
        delete $httpProvider.defaults.headers.common['X-Requested-With'];
    }
]);

CORS をサポートするサーバーは、いくつかのアクセス制御ヘッダーでリクエストに応答する必要があります。

Access-Control-Allow-Origin: "*"

デフォルトでは、CORS リクエストは Cookie を使用して作成されません。サーバーにこのヘッダーが含まれている場合、withCredentials オプションを true に設定することで、リクエストとともに Cookie を送信できます。

Access-Control-Allow-Credentials (optional)

リクエストの withCredentials オプションを true に設定しても、サーバーがこのヘッダーで応答しない場合、リクエストは失敗し、その逆も同様です。

于 2015-01-14T19:07:15.183 に答える