0

私はどこにでも行ってきましたが、役立っている回答を見つけることができないようです。AngularJs AppからDjangoサーバーにアクセスする:簡単な認証ソリューションですか?

私は会社で書かれたdjango RESTfulバックエンドからデータを取得しようとしている角型アプリケーションを作成しました。私はユーザー名とパスワードを持っていますが、バックエンドに認証資格情報を提供するget要求を書く方法がわかりません。私はヘッダーに正確に何を提供するのか混乱している。

最終的には、nginxを使用して通信します。私は角度のアプリ自体に書き込むための修正を探しています

を欲しい

。私は角度アプリケーションをできるだけ別々のdjangoバックエンドから書き込もうとしています。私はすでにクロスオリジンのリソース共有を有効にしています。

これはバックエンドからのデータを表示するためだけのバンドエイドフィックスです。それは決して永久的である必要はありません。

は、これまで私が試してみました:

app.factory('mySamples', ['$http', function($http) { 
    return $http.get('website/api/foo', { 
    headers: {'username':"foo", 'password': 'bar'} 
    }).success(function(data) { 
    return data; 
    }).error(function(err) { 
    return err; 
    }); 
}; 

app.factory('mySamples', ['$http', function($http) { 
    return $http({method: 'GET', url: 'website/api/samples/', headers: { 
     'user': 'foo', 'auth':'bar'} 
    }); 
}; 

第二工場は、私は返すメソッドを書きました:返されたヘッダーの下のネットワークインスペクタでOPTIONS。誰かがすぐに私のAPIからデータを取得するための迅速な修正を持っていますか?

EDIT:私のdjangoバックエンドは基本認証のみをサポートしています。セッションベースのみです。リクエストを編集するにはどうすればよいですか?あなたが基本認証を使用している場合は

答えて

1

(1)、あなたはそうのような基本的な認証を追加することができます。

app.factory('mySamples', ['$http', function($http) { 
    var credentials = btoa(username + ':' + authtoken); 
    var authorization = { 
     'Authorization': 'Basic ' + credentials 
    };   
    return $http({method: 'GET', url: 'website/api/samples/', headers: authorization }); 
}; 

をあなたの$ HTTP呼び出しのすべてが、この同じ認証を使用する場合は、使用することができます$http.defaults.headers.common.Authorization

(2)nginxはセッション処理を提供していないと確信しています。あなたはdjangoでそれをしなければなりません。

(3)通常、RESTは通常ステートレスに実行されるため、RESTでセッションを使用しません。


OPでCORSを有効にする方法が尋ねられました。 CORSを有効にするには、通常、サーバー側で行います。

add_header 'Access-Control-Allow-Origin' '*'; 
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; 

を適切なlocationブロックするには:あなたが追加することにより、nginxの中でそれを行うことができます。 django-cors-middleware(https://pypi.python.org/pypi/django-cors-middleware)やdjango-cors-headers(https://pypi.python.org/pypi/django-cors-headers)のようなミドルウェアのpacakgesを使って、django側でもこれを行うことができます。

+0

ようなヘッダを追加する必要がある場合、私は上に試してみたけど、今は元の参照を横断するように関連するエラーを取得しています。私は得ています: 'XMLHttpRequestはhttps://www.thiswebsideexample/api/thingを読み込めません。プリフライトの応答に無効なHTTPステータスコードがあります403 \ 現在、私はCORSを有効にするためにchrome exention CORSを使用しています。これをアプリケーションの構成に入れる必要はありますか?私は何を変える必要がありますか? –

+0

CORSの問題に対処する方法に関する私の回答を編集しました。 – 2ps

+0

私は、私たちのウェブサイトに基本認証、セッションベースの認証だけが含まれていないことを理解しました。あなたは角のあるアプリケーションからのセッションベース認証を使ってAPIにアクセスする方法を知っていますか? 現在、私はdjangoのバックエンドの設定を変更することができないので、基本認証オプションを追加することはできません。 –

1

まず、サーバー側でどのような種類のAuthenticationAuthorizationが実装されているかを知る必要があります。つまり、サーバーが認証/認可資格情報をどのようなヘッダーで調べ、サーバーが期待する形式であるかを確認し、 。例えばフォーマットusername::passwordAuthorizationヘッダー内の認証資格情報のためのサーバのチェックは、あなたは

headers: {'Authorization': 'johndoe::password'} 
+0

サーバーが何を求めているかを確認する方法はありますか? –

関連する問題