2014-07-21 10 views
15

मैं दोनों महान उपकरण DRF और Django-REST-Swagger का उपयोग कर रहा हूं, हालांकि मेरे कुछ API विचार टोकन प्रमाणीकरण के अंतर्गत हैं।swagger + django आराम ढांचे के लिए टोकन ऑथ जोड़ने के लिए कैसे?

तो अब मैं अपने एपीआई के अपने swagger दस्तावेज़ पृष्ठ में टोकन हेडर समेत उन टोकन औथ api urls का परीक्षण करने की संभावना को जोड़ना चाहता हूं। मैं ये कैसे करूं?।

मेरी कक्षा एपीआई दृश्य का एक स्नैपशॉट इस तरह है:

class BookList(APIView): 
    """ 
    List all books, or create a new book. 
    """ 
    authentication_classes = (TokenAuthentication,) 
    permission_classes = (IsAuthenticated,) 
    ... 

के बाद से स्वैगर ऑटो सामान का एक बहुत का पता लगाता है, मैं के बारे में टोकन प्रमाणन नोटिस, और मुझ में के बारे में टोकन या प्रयोक्ता आईडी पूछने के लिए उम्मीद कर रहा था अपनी वेब इंटरफेस, लेकिन यह नहीं करता है। इसलिए मैं इसे मैन्युअल रूप से CURL कमांड के माध्यम से परीक्षण कर रहा हूं ...

उत्तर

9

मैंने इसे उत्तर दिया क्योंकि मैंने इसे काम किया है।

असल में स्वैगर सेटिंग्स इस के लिए एक विकल्प है, api_key ->

SWAGGER_SETTINGS = { 
    "exclude_namespaces": [], # List URL namespaces to ignore 
    "api_version": '0.1', # Specify your API's version 
    "api_path": "/", # Specify the path to your API not a root level 
    "enabled_methods": [ # Specify which methods to enable in Swagger UI 
     'get', 
     'post', 
     'put', 
     'patch', 
     'delete' 
    ], 
    "api_key": '', # An API key 
    "is_authenticated": False, # Set to True to enforce user authentication, 
    "is_superuser": False, # Set to True to enforce admin only access 
} 
मेरे लिए

यह है कि स्पष्ट नहीं था, लेकिन मैं सिर्फ इनपुट उपयोगकर्ता के परीक्षण के लिए एक वैध टोकन है और यह प्रमाणन के लिए काम किया आवश्यक विचारों :-)

+0

मैं इसे काम करने के लिए सफल नहीं हो सका। सभी अपने विचार permission_class IsAuthenticated गया है। मैं सत्र, बेसिक, और टोकन प्रमाणीकरण का उपयोग कर रहा हूँ। एपीआई कुंजी कैसे जोड़ें और यह कहां है? – aRkadeFR

+1

@aRkadeFR, SWAGGER_SETTINGS में 'api_key' फ़ील्ड से, मेरा यह => "api_key" के समान है: प्रमाणीकरण: 'fasd12d1a7 ........ c26f34r2f', – miguelfg

15

आप टोकन प्रमाणीकरण का उपयोग कर रहे हैं, तो आप मूल रूप से this question

को देखने के लिए चाहते हो सकता है, तो आप सिर्फ अपने settings.py को यह जोड़ने की जरूरत:

+०१२३५१६४१०६१
SWAGGER_SETTINGS = { 
    'SECURITY_DEFINITIONS': { 
     'api_key': { 
      'type': 'apiKey', 
      'in': 'header', 
      'name': 'Authorization' 
     } 
    }, 
} 

अपने स्वैगर यूआई पृष्ठ में आपको प्राधिकृत बटन देखना चाहिए। उस पर क्लिक करें और इनपुट टेक्स्ट फ़ील्ड में प्रमाणीकरण मान दर्ज करें।

+0

वर्क्स आकर्षण की तरह, मैं उपयोग करने के लिए "नाम था -टेकन " –

+0

यह मेरे लिए काम नहीं किया। ऑथ-टोकन और प्रमाणीकरण दोनों की कोशिश की। – Arvind

5

मेरी समस्या यह थी कि टोकन प्रमाणीकरण को सक्रिय करने के बाद मेरे एपीआई यूआरएल को प्रमाणीकरण त्रुटि के कारण swagger UI में और नहीं दिखाया गया था।
मेरे लिए समाधान Django बाकी फ्रेमवर्क सेटिंग्स में दोनों authentaction वर्गों को सक्रिय करने गया था:
SessionAuthentification -> स्वैगर यूआई
TokenAuthentification के लिए -> बाकी ग्राहकों

REST_FRAMEWORK = { 
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), 
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication', 
    'rest_framework.authentication.SessionAuthentication' 
) 

} के लिए

4

स्कीमा व्यू को AllowAny की अनुमति की आवश्यकता है। यह प्लगइन को यह देखने की अनुमति देता है कि उपयोगकर्ता ने प्रमाणीकृत होने से पहले कौन से एंडपॉइंट उपलब्ध हैं। यदि वे सही तरीके से सेटअप हैं तो अंतिम बिंदु अभी भी संरक्षित किए जाने चाहिए। उदाहरण:

@api_view() 
@renderer_classes([SwaggerUIRenderer, OpenAPIRenderer, renderers.CoreJSONRenderer]) 
@authentication_classes((TokenAuthentication, SessionAuthentication)) 
@permission_classes((AllowAny,)) 
def schema_view(request): 
    generator = schemas.SchemaGenerator(
     title='My API end points', 
     patterns=my_urls, 
     url="/api/v1/") 
    return response.Response(generator.get_schema(request=request)) 

यह SessionAuthentication दूर करने के लिए और केवल TokenAuthentication का उपयोग सबसे अच्छा है, लेकिन वह पसंद की बात है, यहाँ मैं हटा दिया है यह

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': [ 
     'rest_framework.permissions.IsAuthenticated' 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework.authentication.TokenAuthentication' 
) 

यह आपके इंस्टॉल किए गए एप्लिकेशन में 'rest_framework.authtoken' जोड़ने सुनिश्चित करें और मिडलवेयर कक्षाओं से CsrfViewMiddleware हटा दें क्योंकि इसकी अब आवश्यकता नहीं होगी।और अकड़ सेटिंग्स

SWAGGER_SETTINGS = { 
    'SECURITY_DEFINITIONS': { 
     'api_key': { 
      'type': 'apiKey', 
      'in': 'header', 
      'name': 'Authorization' 
     } 
    }, 
    'USE_SESSION_AUTH': False, 
    'JSON_EDITOR': True, 
} 

यह अकड़ कर देगा उदाहरण कर्ल के सभी में टोकन पॉप्युलेट रूप में अच्छी तरह आदेश, जो वास्तव में अच्छा है। सत्र में सत्र को छोड़कर यह अक्षम करना प्रतीत होता है।

अकड़ प्राधिकरण संवाद api_key जो प्रदान किए जाने की आवश्यकता के लिए पूछता है। ऐसा सुधार नहीं हो सकता है, अगर मैं करता हूं तो इस पोस्ट को अपडेट कर देगा।

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