2017-10-02 20 views
0

ionicアプリをdjango rest frameworkバックエンドで構築しています。単純なHTTP基本認証を行うことはできません。HTTP基本認証を行う方法

バックエンドview

class GetActive(APIView): 
    permission_classes = (permissions.IsAuthenticated,) 

    def get(self, request): 
     settings = Setting.objects.filter(active=True) 
     for setting in reversed(settings): 
      headers = {'Access-Control-Allow-Origin': '*'} 
      return Response({ 
       'youtube_link': setting.youtube_link, 
       'text': setting.text}, headers=headers) 
     return HttpResponse('not found') 

は、フロントエンドapi.ts

@Injectable() 
export class ApiProvider { 
    url; 

    constructor(public http: Http) { 
    this.url = 'http://127.0.0.1:8000/get_active/'; 
    } 

    getSettings() { 
    var auth = window.btoa("foo:bar"), 
     headers = {"Authorization": "Basic " + auth}; 
    return this.http.get(this.url, {headers: headers}).map(res => res.json()); 
    } 
} 

私はこのエラーを取得しています:

403 forbidden No 'Access-Control-Allow-Origin' header is present on the requested resource. 

しかし、私はバックエンドでIsAuthenticated permissonを削除して、ヘッダを削除した場合フロントエンドの要求からそれが動作しています。

IsAuthenticatedが上にあるときに、それが実際に機能していることを確信するために、私はこのPythonスクリプトを行います

import requests 
from requests.auth import HTTPBasicAuth 

theurl = 'http://localhost:8000/get_active' 
username = 'foo' 
password = 'bar' 

r = requests.get(theurl, auth=HTTPBasicAuth(username, password)) 
print (r.text) 

そして、それは正常に動作しているので、私はちょうどJSアナログを必要としています。

+0

javascriptからajaxを呼び出すにはCORSをサーバ上で有効にする必要があるため、WebサーバでCORSを有効にする必要があります –

答えて

1

CORSをサーバーに追加します。 pip install django-cors-headersとヘッダを追加してください 多分このヘルプ