【问题标题】:Django REST Framework Swagger - Authentication ErrorDjango REST Framework Swagger - 身份验证错误
【发布时间】:2017-01-25 14:39:29
【问题描述】:

我遵循了in the docs 的指示。所以这是我的看法:

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))

我在urls.py 中添加了以下内容:

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

当我转到我的项目的/docs/ 页面时,我收到以下错误:

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

在浏览器控制台中我收到了这条消息:

Unable to Load SwaggerUI init.js (line 57)

当我将schema_viewpermission_classes 设置为AllowAny 时,我能够查看我的api 文档。但是,我不确定这是否是正确的方法。没有办法以管理员或任何其他用户身份登录以查看文档。另外,在浏览器中查看时如何提供身份验证令牌?也许我错过了文档中的某些内容。

【问题讨论】:

  • 您在 DRF 中使用哪种身份验证?
  • 我正在使用令牌认证。

标签: python django django-rest-framework swagger swagger-ui


【解决方案1】:

我想我已经找到了解决办法。

settings.py中,我添加了以下设置:

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

然后当我加载页面时,我只需点击右上角的 Authorize 按钮,然后在 value 文本字段中输入此值:

Token <valid-token-string>

但是,我仍然需要将schema view 的权限类设置为AllowAny。 auth token 只是让我从不同的用户切换,允许我查看不同的端点集。

【讨论】:

  • 非常感谢你,2小时的调查到此结束
  • 在 django swagger 的 2.2.0 版本中,授权按钮是否存在错误。降级到版本 2.1.2 问题已修复。
  • @Melvic 有没有办法将“令牌”字符串附加到令牌值?我正在创建用于使用 codegen 生成 C# 客户端的 swagger 规范,所以我被困在那里。
【解决方案2】:

有没有办法以管理员或任何其他用户身份登录以查看文档。

如果你只使用token认证,先create tokens for your users,然后通过设置header来访问资源

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

【讨论】:

  • 我打电话给我的服务时会这样做。但是,swagger UI 不应该在浏览器中访问,而不是使用 cURL 或 Postman 吗?
  • 我对swagger不熟悉,不知道swagger UI supposed to be accessed in the browser是否不用SessionAuthentication。但您也可以在 DRF 中启用 SessionAuthentication。
  • 我的 API 服务使用令牌认证。 Swagger 插件仅用于生成 api 文档。所以它应该在浏览器AFAIK中访问。我不能只是将我的 API 设计更改为 SessionAuthentication,以便我可以登录 Swagger 或类似的东西。
  • 答案应该是特定的。
猜你喜欢
  • 2019-01-01
  • 1970-01-01
  • 2018-09-01
  • 2013-05-03
  • 2021-09-09
  • 2015-11-12
  • 2015-12-26
  • 2020-04-10
  • 2015-06-01
相关资源
最近更新 更多