使用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',
),
}
有人有任何想法吗?
答案 0 :(得分:0)
我找到了原因。这是因为我在HTTP标题名称中使用下划线来设置CSRFTOKEN:我在javascript中执行此操作:header['X_CSRFTOKEN'] = mytoken
。但是因为生产服务器剥离了下划线标题名称runserver这样做。 runserver_plus没有相同的行为,并允许使用下划线的http标头名称。
用header['X-CSRFTOKEN'] = mytoken
替换我的javascript(短划线而不是下划线)使其有效。