0

使用 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 framework 身份验证类是 SessionAuthentication

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

有人知道吗?

4

1 回答 1

0

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

于 2017-05-03T08:48:34.590 回答