Django REST框架没有带有runserver但使用runserver_plus的CSRF令牌

时间:2017-05-03 07:41:00

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

使用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框架认证classe是SessionAuthentication

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

有人有任何想法吗?

1 个答案:

答案 0 :(得分:0)

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