【问题标题】:Django REST framework no CSRF token with runserver but with runserver_plusDjango REST框架没有带有runserver但带有runserver_plus的CSRF令牌
【发布时间】:2017-05-03 07:41:00
【问题描述】:

使用 django-extensions 的“runserver_plus”命令,我对 CSRF 令牌没有任何问题。令牌在登录后的服务器响应中按预期在 cookie 中定义,我在不安全的 HTTP 请求(POST、PUT 等)期间使用它在 HTTP 标头中将其发送回服务器 但由于某些原因,我不得不不再使用“runserver_plus”并切换回旧的“runserver”命令。因为,我在登录后从服务器获得的 CSRF 令牌不再起作用。我收到错误CSRF Failed: CSRF token missing or incorrect.。代码没有其他变化。只需从 runserver_plus 切换到旧版 runserver。

我真的不明白为什么。对我来说这是一个错误。

当然,REST框架的认证类是SessionAuthentication

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
    ),
}

有人知道吗?

【问题讨论】:

    标签: django-rest-framework csrf django-extensions


    【解决方案1】:

    我找到了原因。这是因为我在 HTTP 标头名称中使用下划线来设置 CSRFTOKEN:我在 javascript 中执行此操作:header['X_CSRFTOKEN'] = mytoken。但是因为生产服务器去掉了带下划线的标题名称 runserver 这样做。 runserver_plus 不具有相同的行为,并允许带下划线的 http 标头名称。 用header['X-CSRFTOKEN'] = mytoken(破折号代替下划线)替换我的javascript使其工作。

    【讨论】:

      猜你喜欢
      • 2016-04-19
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2015-05-10
      • 2023-03-17
      相关资源
      最近更新 更多