【问题标题】:Django Rest Framework + Swagger : error { "detail": "CSRF Failed: CSRF token missing or incorrect." }Django Rest Framework + Swagger:错误 {“detail”:“CSRF 失败:CSRF 令牌丢失或不正确。” }
【发布时间】:2021-06-04 05:34:54
【问题描述】:

您好,我正在使用 Django Rest Framework 和 Swagger。我在 POST 请求时收到此错误。

{
  "detail": "CSRF Failed: CSRF token missing or incorrect."
}

考虑到 POST 请求包含,这很奇怪

"X-CSRFToken: 01658Gyfzlhz2v6zgoZjtbHSrWzrVTBrlseyp2JMfVHvh6PzfamHpgxuh4eaVXad"

这是完整的请求

curl -X POST "http://127.0.0.1:8000/api/order-post/" -H  "accept: application/json" -H  "Content-Type: application/x-www-form-urlencoded" -H  "X-CSRFToken: 01658Gyfzlhz2v6zgoZjtbHSrWzrVTBrlseyp2JMfVHvh6PzfamHpgxuh4eaVXad" -d "customer_name=Muhammad%20Ahsan%20Mukhtar&country=Pakistan&address=Cb%20679%20Kashmir%20Colony%20Gujranwala%20Cantt&email=ahsan44411%40gamil.com&postal_code=52250&country_code=4343&phone_number=243434&tracking_number=4343"

我什至尝试过使用 csrf_exempt 但这也无济于事,我得到了同样的错误。

@method_decorator(csrf_exempt, name="dispatch")
class OrderPost(generics.ListCreateAPIView):
    queryset = Order.objects.all()
    serializer_class = OrderSerializer

我正在使用 Django Rest Framework 的默认设置,我相信它是 SessionAuthentication。

我已经坚持了几个小时没有运气,任何帮助将不胜感激。谢谢。

【问题讨论】:

  • DRF 视图已免于 csrf 检查
  • @JPG 这仍然不能说明我遇到的错误
  • 您是否尝试在不发送X-CSRFToken 标头的情况下访问端点?
  • @JPG 我没有发送 X-CSRFToken。 Swagger 可能正在添加此标头本身。我已经在 Postman 上测试过 API,它在那里运行良好。它只是在这里给出一个问题。

标签: django django-rest-framework swagger


【解决方案1】:

我们遇到了类似的问题。事实证明,DEFAULT_AUTHENTICATION_CLASS 中的 SessionAuthentication 导致了这个问题。尝试删除或评论该行。

REST_FRAMEWORK = {
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication'
        # 'rest_framework.authentication.SessionAuthentication',
    ],
    'DEFAULT_PARSER_CLASSES': [
       'rest_framework.parsers.FormParser',
       'rest_framework.parsers.MultiPartParser',
       'rest_framework.parsers.JSONParser',
    ],
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
    ],
}

【讨论】:

    猜你喜欢
    • 2014-02-26
    • 2021-10-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2021-07-14
    • 2014-05-13
    • 2014-09-10
    相关资源
    最近更新 更多