如何在django-yasg上添加前缀“token”?

ghhaqwfi  于 2023-03-20  发布在  Go
关注(0)|答案(5)|浏览(205)

我已经安装了django-rest-frameworkdjango-yasg来生成swagger文档,当我尝试使用django-yasg中的用户界面时,身份验证不使用Authentication头上的前缀Token,例如:
django-rest-framework所需的标头:
“认证:令牌XXX”
django-yasg生成的标题:
“认证:三十”
我也发现了这个问题;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上设置前缀,以便用户不必编写它?

chhkpiq4

chhkpiq41#

据我所知,这就是drf-yasg现在所能做到的,只是它的设计不支持JWT令牌,因为它只实现了openapi2.0。

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

这只是开发者使用bearer jwt的一个变通方法。(似乎是作者在drf-yasg github repo的一期中首次写的)Openapi 2.0的SECURITY DEFINITION包括apikeybasicoauth2。它不包括jwt令牌的格式。
如果你想在API文档中使用swaager,并且还需要Bearer前缀,请尝试那些支持openapi 3.0的生成器,点击这个链接,你会发现它本机支持JWT Bearer。

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

drf-yasg的作者在drf-yasg的repo的readme.md中推荐了drf-spectacular
如果您希望在新项目中添加Swagger/OpenAPI支持,您可能需要查看drf-spectual,这是一个积极维护的新库,在使用OpenAPI 3.0模式时,它与本项目的大部分目标相同。
OpenAPI 3.0在可描述的API类型方面提供了比2.0更多的灵活性。drf-yasg不太可能很快获得对OpenAPI 3.0的支持。
就像这张照片drf-spectacular demo
老实说,drf-yasg现在的开发速度变慢了,可能是为了支持openapi 3.0吧,最近发现了一个bug,然后发了一个问题,后来我修复了这个bug,做了一个pr,但是已经11天了,一点回复都没有,看来drf-yasg需要一定的时间来支持openapi 3.0。

mctunoxg

mctunoxg2#

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

在swagger-ui中键入“令牌XXXXXXXXXXXXXXX”。

ivqmmu1c

ivqmmu1c3#

用这个

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

参见图像
在“授权”屏幕上添加
承载人xxxxx
[1]: https://i.stack.imgur.com/UG0Dl.png

ssgvzors

ssgvzors4#

设置后用DRF_YASG解决此问题

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

授权时添加承载者现在有效,即
无记名
其中xxxx是您的访问令牌

rt4zxlrg

rt4zxlrg5#

在右上角,你有一个“授权”按钮,点击它并粘贴令牌,就像我在这个截图中所做的那样。

相关问题