【问题标题】:How to add prefix "token" on django-yasg?如何在 django-yasg 上添加前缀“token”?
【发布时间】:2020-04-28 00:57:56
【问题描述】:

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

django-rest-framework 需要标头:

“身份验证:令牌 XXX”

django-yasg生成的头文件:

“身份验证:XXX”

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

这是我的swagger settings

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

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

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

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

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

    这只是一个使用apiKey 的解决方法,供开发人员使用bearer jwt。(它似乎首先由作者在drf-yasg github repo 中的一个问题中编写)。 Openapi 2.0SECURITY DEFINITION包括apikey,basicoauth2。不包括jwt的格式。

    如果你想在你的 api 文档中使用 swaager 并且还需要 Bearer 前缀,试试那些支持 openapi 3.0 的生成器,检查这个链接,你会发现它原生支持 JWT Bearer。它看起来像这样:

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

    drf-yasg的作者在readme.mddrf-yasg的repo中推荐了drf-spectacular

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

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

    就像这张照片一样。 drf-spectacular demo

    老实说,我会说 drf-yasg 现在正在放慢它的开发进程。也许作者正在开发以支持openapi 3.0。我最近发现了一个错误,然后我发布了一个问题。后来我修复了这个错误并发出了pr,但是已经11天了,根本没有任何回复。好像drf-yasg 需要一些时间来支持openapi 3.0。

    【讨论】:

      【解决方案2】:
      SWAGGER_SETTINGS = {
          'USE_SESSION_AUTH': False,
          'SECURITY_DEFINITIONS': {
              'Bearer': {
                  'type': 'apiKey',
                  'name': 'Authorization',
                  'in': 'header'
              }
          }
      }
      

      在 swagger-ui 中输入“令牌 XXXXXXXXXXXXXXXXX”。

      【讨论】:

      • 对不起,如果不清楚,我想要的是已经定义了“令牌”前缀,所以用户不必写“令牌 xxx”
      • @RafaAcioly 你能弄明白吗?我也不希望用户写 Token XXX
      • @palAlaa 不,我也在 git repo 上问过,这就是他们给我的答案:github.com/axnsan12/drf-yasg/issues/367#issuecomment-501494227
      【解决方案3】:

      在右上角,您有“授权”按钮。像我在此屏幕截图中所做的那样转到它并粘贴令牌。

      I hope this one helps.

      【讨论】:

      • 对不起,不清楚,我想要的是已经定义了“令牌”前缀,所以用户不必写“令牌”
      猜你喜欢
      • 2020-10-15
      • 2018-12-12
      • 2018-10-03
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 2018-11-01
      相关资源
      最近更新 更多