Melvic Ybanez
Melvic Ybanez

Reputation: 2023

Django REST Framework Swagger - Authentication Error

I followed the instructions in the docs. So here's my view:

from rest_framework.decorators import api_view, renderer_classes
from rest_framework import response, schemas
from rest_framework_swagger.renderers import OpenAPIRenderer, SwaggerUIRenderer


@api_view()
@renderer_classes([OpenAPIRenderer, SwaggerUIRenderer])
def schema_view(request):
    generator = schemas.SchemaGenerator(title='Bookings API')
    return response.Response(generator.get_schema(request=request))

And I added the following to my urls.py:

url(r'^docs/', views.schema_view),

When I went to the /docs/ page of my project, I got the following error:

401 : {"detail": "Authentication credentials were not provided."} http://127.0.0.1:8000/docs/?format=openapi

In the browser console I got this message:

Unable to Load SwaggerUI init.js (line 57)

When I set the permission_classes of my schema_view to AllowAny, I was able to view my api docs. However, I'm not sure if this is the right way of doing this. Isn't there a way to login as an admin, or any other user to view the docs. Also, how do I provide the auth tokens when viewing this in the browser? Maybe I missed something in the docs.

Upvotes: 11

Views: 13316

Answers (2)

Melvic Ybanez
Melvic Ybanez

Reputation: 2023

I think I've found the solution.

In the settings.py, I added the following settings:

SWAGGER_SETTINGS = {
    'SECURITY_DEFINITIONS': {
        'api_key': {
            'type': 'apiKey',
            'in': 'header',
            'name': 'Authorization'
        }
    },
}

Then when I load the page, I just click on the Authorize button at the upper right and enter this value in the value text field:

Token <valid-token-string>

However, I still needed to set the permission class of the schema view to AllowAny. The auth token just let me switch from different users, allowing me to view different set of endpoints.

Upvotes: 20

Windsooon
Windsooon

Reputation: 7110

Isn't there a way to login as an admin, or any other user to view the docs.

If your only use token authentication, first create tokens for your users, then access the resources by setting the header

curl -X GET http://127.0.0.1:8000/api/example/ -H 'Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b'

Upvotes: 0

Related Questions