2015-10-11 3 views
5

जेडब्ल्यूटी आधारित प्रमाणीकरण मोबाइल से भेजे गए POST अनुरोधों और "उन्नत आराम क्लाइंट" का उपयोग करके अच्छी तरह से काम करता है, हालांकि यह Django परीक्षण क्लाइंट का उपयोग करते समय विफल रहता है। ग्राहक अनुरोध करते समय सफलतापूर्वक टोकन प्राप्त करता है, लेकिन उस टोकन का उपयोग करके प्रतिबंधित दृश्य तक पहुंचने का प्रयास करते समय इसे निम्न प्रतिक्रिया मिलती है।आरईएसटी फ्रेमवर्क जेडब्ल्यूटी का उपयोग कर प्रमाणीकरण का परीक्षण कैसे करें?

"प्रमाणीकरण प्रमाण-पत्र प्रदान नहीं किए गए थे।"

परीक्षण का मामला: परीक्षण ग्राहक से

def test_get_token(self): 
     response = self.client.post("/auth/api/get_token/", {"username": "Heffalumps", "password": "Woozles"}) 
     self.assertEqual(response.status_code, 200, "The token should be successfully returned.") 

     response_content = json.loads(response.content.decode('utf-8')) 
     token = response_content["token"] 

     # The following request fails 
     response = self.client.post("/auth/api/authenticated/", {}, Authorization='JWT ' + token) 
     response_content = json.loads(response.content.decode('utf-8')) 

     self.assertEqual(response_content["authenticated"], "mooh", "The user should be able to access this endpoint.") 

निवर्तमान अनुरोध: enter image description here

प्रतिबंधित दृश्य:

class RestrictedView(APIView): 
    permission_classes = (permissions.IsAuthenticated,) 
    authentication_classes = (JSONWebTokenAuthentication,) 

    def post(self, request): 

     response_data = json.dumps({"authenticated": "mooh"}) 

     return HttpResponse(response_data, content_type='application/json') 

मैं परीक्षण का मामला में कुछ कमी है?

बजाय::

response = self.client.post("/auth/api/authenticated/", {}, HTTP_AUTHORIZATION='JWT {}'.format(token)) 

प्रमाणीकरण Django परीक्षण ग्राहक के रूप में के माध्यम से अब काम करता है:

response = self.client.post("/auth/api/authenticated/", {}, Authorization='JWT ' + token) 

मैं लिखना पड़ा

उत्तर

9

ठीक है, निम्नलिखित समस्या हल हो जाती है लगता है कुंआ।

+0

धन्यवाद! मेरा दिन बचाया –

+0

मैं टोकन प्रमाणीकरण के साथ Django Rest API का उपयोग कर रहा था और इसे बदलने के लिए आवश्यक था: प्रतिक्रिया = self.client.get ('/ api/someurl', {}, HTTP_AUTHORIZATION = 'टोकन {}'। प्रारूप (self.token)) –

0

यह ध्यान रखें कि सहायक हो सकता है, जब OAuth2 के माध्यम से जेडब्ल्यूटी उपयोग करते हुए, निम्नलिखित कोड प्रमाणीकरण क्रेडेंशियल्स बनाता है:

self.client.post("/auth/api/authenticated/", {}, HTTP_AUTHORIZATION='Bearer {0}'.format(token)) 

Django बाकी फ्रेमवर्क, तथापि, मचान भी शामिल है एक अनुरोध को प्रमाणित करने के: http://www.django-rest-framework.org/api-guide/testing/#forcing-authentication

इसके अतिरिक्त, यहां कुछ दिलचस्प परीक्षण हैं: https://github.com/jpadilla/django-jwt-auth/blob/master/tests/test_mixins.py

संबंधित मुद्दे