2017-10-02 2 views
0

Ich baue ionic App mit django rest framework Backend, Und ich kann nicht einfach http grundlegende Auth tun.Wie man HTTP Basic Auth mit eckigen

Backend 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') 

Frontend 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()); 
    } 
} 

Ich erhalte diese Fehlermeldung:

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

Wenn ich jedoch IsAuthenticated permisson auf Backend entfernen und Header entfernen von der Frontend-Anfrage funktioniert es dann.

Um sicher zu sein, dass es in der Tat funktioniert, wenn IsAuthenticated eingeschaltet ist, Ich mache diesen Python-Skript:

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) 

Und es funktioniert gut, so dass ich brauche nur analog js.

+0

Sie müssen CORS auf Ihrem Webserver aktivieren, weil einen AJAX-Aufruf von Javascript Sie sollten CORS auf dem Server aktiviert haben –

Antwort

1

Fügen Sie CORS dem Server hinzu. pip installieren django-kors-headern und fügen header vielleicht diese hilfe