2017-02-04 5 views
1

zuzugreifen versuchen, Ich versuche, einen django-Server mit django-Rest-Rahmen aus Winkel für den Zugriff auf den folgenden Dienst mit:403 Forbidden wenn API über DRF

myapp.factory("GetData", ["$resource",function($resource) { 
    return $resource(
     "http://local/path/**/users/:username/", 
     {}, 
     { 
     "query": { 
     method: "GET", 
     isArray: true, 
     headers:{ 
      "Content-Type":"application/json" 
     } 
     } 
    }, 
    { 
    stripTrailingSlashes:false 
    } 
    ); 
}]); 

Wenn ich die URL im Browser setzen, ich bekomme die gewünschte Ausgabe, aber das Problem ist, dass, wenn ich versuche, über Angular zuzugreifen, bekomme ich in meiner Konsole einen 403 verbotenen Fehler. Kann mir jemand erklären, was das verursacht? und wie ich dieses Problem möglicherweise beheben kann.

Mein url.py sieht wie folgt aus:

from rest_framework.routers import DefaultRouter 
from .views import UserViewSet 

router = DefaultRouter() 
router.register(prefix='users', viewset=UserViewSet) 

urlpatterns = router.urls 

Meine views.py Datei wie folgt:

from django.shortcuts import render 
from django.http import HttpResponse 
from rest_framework import viewsets 
from .models import users 
from .serializers import UserSerializer 

class UserViewSet(viewsets.ModelViewSet): 
    queryset = users.objects.all() 
    serializer_class = UserSerializer 
+0

Neben dem HTTP-Statuscode, was ist der Hauptteil der Antwort? Was enthält es? – TGO

+0

Das ist der ganze Fehler, den ich in meiner Konsole erhalte: GET http: // local/path/**/users/403 (verboten) (anonym) @ angular.js: 12011 sendReq @ angular.js: 11776 serverRequest @ Angularjs: 11571 Process @ Angularjs: 16383 (anonym) @ Angularjs: 16399 eval $ @ Angularjs: 17682 verdauen $ @ Angularjs: 17495 $ gelten @ Angularjs : 17790 erledigt @ angular.js: 11831 completeRequest @ angular.js: 12033 requestLoaded @ angular.js: 11966 – Tatenda

+0

Was passiert, wenn Sie diese URL öffnen: local/path/**/Benutzer in Ihrem Browser (dh nicht durch eckig)? – TGO

Antwort

0

ich es geschafft, das Problem zu beheben, indem die Kombination, was @Bipul Jain https://stackoverflow.com/a/42044910/7210105 vorgeschlagen (siehe oben) und auch auf diesen Link in meinem $ resource verändern

"http://local/path/ **/users /: Benutzername /"

I entfernt http://local/path aus dem Link und die 403 verboten Fehler ging weg.

+0

aah. Das war ein anderer. Ich bin mir nicht sicher, ob meine Antwort hier akzeptiert werden kann. –

1

ich denke, die 403 verboten kommt nach Browser Block Quer Herkunft Anfragen. Sie müssen CORS auf Ihrem API-Server aktivieren, indem Sie entsprechende Header festlegen.

können Sie https://github.com/ottoyiu/django-cors-headers Nachschlag

das für Sie in Ihrer installierten Anwendungen hinzufügen müssen.

'corsheaders' 

Und nur eingestellt, um es zu testen. Überprüfen Sie die Einstellungen in den Dokumenten auf Feinabstimmung.

CORS_ORIGIN_ALLOW_ALL = True 

bearbeiten

Darüber hinaus müssen Sie dies in Ihrem Middle hinzuzufügen.

'corsheaders.middleware.CorsMiddleware', 
+0

Diese Methode hat nicht funktioniert. Aber ich glaube, dass es etwas mit CORS zu tun hat. Gibt es einen anderen Umgang mit CORS als den, den Sie hier identifiziert haben? – Tatenda

+0

Vergessen, die Middleware-Konfiguration hinzuzufügen. Erreicht die Anfrage den Server?Wenn ja, was ist dann die Fehlermeldung von dort? –

+0

XMLHttpRequest kann http: // localhost: 8000/accounts/users/nicht laden. Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Origin 'http: // localhost: 3000' ist daher kein Zugriff erlaubt. Die Antwort hatte den HTTP-Statuscode 403. Ich erhalte diesen Fehler, bevor ich localhost auf die weiße Liste gesetzt habe: 3000 @Bipul Jain – Tatenda