我遇到的問題在任何地方發現我遇到的問題(我認爲)我從Angular 4發送到Django的HTTP請求中的授權標頭Rest框架API我已經創建。讓我們着手進行:對Django Rest Framework的角度4 HTTP請求
編輯: 證實了這個問題,因爲我也使用Django-CORS-標題現在擺脫自己的CORS問題的4200端口(因爲它被認爲是一個不同的關於授權起源)。問題仍然存在,只是在向API發送請求時收到「未經授權」的消息。我開始認爲這是一個編碼問題,因爲當我嘗試用httpie以下的請求將顯示以下信息:
http GET http://localhost:8000/api/groups/ "Authorization: Basic admin:password"
,然後顯示的消息:
{
"detail": "Invalid basic header. Credentials not correctly base64 encoded."
}
在設置。 py,我確定已經有了一個權限類和認證類。
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.BasicAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAdminUser'
],
...
CORS_ORIGIN_WHITELIST = [
'localhost:4200',
]
在views.py,這也許是在我的錯,因爲是在控制檯錯誤嘗試發送從角的要求時,我得到 - > REST API是「否‘訪問控制允許來源’標題出現在請求的資源上。'這是不真實的,因爲當我刪除認證需求時,它不會抱怨這一點。
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
permission_classes = (IsAdminUser,)
authentication_classes = (BasicAuthentication,)
def list(self, request):
queryset = User.objects.all().order_by('-date_joined')
serializer = UserSerializer(queryset, many=True, context={'request': request})
return Response(serializer.data,
status=200)
的角度dev的服務器在本地主機上運行:4200,而Django是留在其本地主機的默認值:8000。
我會包括良好的措施的urls.py:
from django.conf.urls import url, include
from rest_framework import routers
from backend.api import views
from django.contrib import admin
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
router.register(r'info', views.InfoViewSet)
urlpatterns = [
url(r'^api/', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^admin/', admin.site.urls),
]
請注意,我可以請求和使用授權頭,像這樣得到迴應就好用httpie:
http GET http://localhost:8000/api/users/ -a admin:password
最後,這裏是發出請求的角碼(包括我的一切,使進口可以被檢查爲好):
我也導入了HttpClientModule,並將其列在我的app.module的'imports'下。
Hi ..try to his.http.get(url) –