2016-10-03 6 views
0

을 추가되지 않습니다 I 구현 사용자 인증, 내 설정에서 docs사용자 정의 헤더 장고 나머지에 request.META에 프레임 워크

# custom_permissions.py 

from rest_framework import authentication 
from rest_framework import exceptions 

class KeyAuthentication(authentication.BaseAuthentication): 
    def authenticate(self, request): 
     key = request.META.get('Authorization') 
     print(key) 
     if not key: 
      raise exceptions.AuthenticationFailed('Authentication failed.') 

     try: 
      key = ApiKey.objects.get(key=key) 
     except ApiKey.DoesNotExist: 
      raise exceptions.AuthenticationFailed('Authentication failed.') 

    return (key, None) 

에 설명 된대로 :

시험 중에 예상대로 작동
# settings.py 

REST_FRAMEWORK = { 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'api_server.apps.api_v1.custom_permissions.KeyAuthentication', 
    ), 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.AllowAny', 
    ), 
} 

:

def test_1(self): 
    client = APIClient() 
    client.credentials(X_SECRET_KEY='INVALID_KEY') 
    response = client.get('/v1/resource/') 
    self.assertEqual(response.status_code, 403) 
    self.assertEqual(response.data, {'detail': 'Authentication failed.'}) 

def test_2(self): 
    client = APIClient() 
    client.credentials(X_SECRET_KEY='FEJ5UI') 
    response = client.get('/v1/resource/') 
    self.assertEqual(response.status_code, 200) 

그러나 내가 curl 및 로컬 r 서버가없는 경우 request.METAX_SECRET_KEY 헤더가 없습니다. 수신 된 키가 예상되는 동안 터미널에 None을 인쇄 중입니다.

$ curl -X GET localhost:8080/v1/resource/ -H "X_SECRET_KEY=FEJ5UI" 
{'detail': 'Authentication failed.'} 

힌트를 주시겠습니까? 그게 무슨 문제입니까?

답변