首页 > 解决方案 > 如何在 django-yasg 上添加前缀“token”?

问题描述

我已经安装django-rest-frameworkdjango-yasg生成了 swagger 文档,当我尝试使用django-yasg身份验证中的 ui 时,不使用标题Token上的前缀,例如:Authentication

所需的标头django-rest-framework

“身份验证:令牌 XXX”

由 生成的标头django-yasg

“认证:XXX”

我也发现了这个问题;https://github.com/axnsan12/drf-yasg/issues/367 说我需要token通过swagger-ui添加前缀,但是我该怎么做呢?

这是我的swagger settings

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

如何在 swagger-ui 上设置前缀,以便用户必须编写它?

标签: djangodjango-rest-framework

解决方案


据我所知,这就是drf-yasg目前的能力。它只是不是为了支持JWT令牌而设计的,因为它只实现了 openapi 2.0

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

这只是apiKey供开发人员使用的一种变通方法bearer jwt。(它似乎是作者首先在drf-yasggithub repo中的一个问题中编写的)。Openapi 2.0SECURITY DEFINITION包含apikey,basic和.oauth2它没有包含jwttoken 的格式。

如果您想为您的 api 文档使用 swaager 并且还需要该Bearer前缀,请尝试那些支持openapi 3.0的生成器,检查此链接,您会发现它本机支持 JWT Bearer。它看起来像这样:

{
  "type": "http",
  "scheme": "bearer",
  "bearerFormat": "Bearer", # or whatever prefix you wish
}

作者在of的 repo中drf-yasg推荐。drf-spectacularreadme.mddrf-yasg

如果您希望将 Swagger/OpenAPI 支持添加到新项目中,您可能需要查看 drf-spectacular,这是一个积极维护的新库,它共享该项目的大部分目标,同时使用 OpenAPI 3.0 模式。

OpenAPI 3.0 在可描述的 API 类型方面比 2.0 提供了更多的灵活性。drf-yasg 不太可能很快获得对 OpenAPI 3.0 的支持。

就像这张照片一样。 drf-壮观的演示

老实说,我会说 drf-yasg 现在正在减慢其开发过程。也许作者正在开发以支持openapi 3.0。我最近发现了一个错误,然后我发布了一个问题。后来我修复了那个bug并做了一个pr,但是已经11天了,根本没有任何回复。似乎drf-yasg需要一些时间来支持 openapi 3.0。


推荐阅读