我在Django Rest Framework文档中找到了这个:
REST框架中的CSRF验证与标准Django的工作方式略有不同,因为需要支持对同一视图的会话和非会话身份验证。这意味着只有经过身份验证的请求才需要CSRF令牌,并且可以在没有CSRF令牌的情况下发送匿名请求
默认情况下,DRF使用以下身份验证类:
'DEFAULT_AUTHENTICATION_CLASSES'= (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
),
在为未经身份验证的用户检查csrf令牌时,使用SessionAuthentication类支持会话和非会话身份验证会出现什么问题?
答案 0 :(得分:0)
CSRF令牌用于阻止cross site request forgery。这样,您可以确保只有那些客户端可以将POST数据提交到您的服务器前面提供的Web服务器。
在基于django的项目中,登录页面由此django呈现,因此django在此页面中包含有效的CSRF令牌。当登录表单提交时,可以验证哪些。
如果是REST API,API不得在前面呈现任何表单。这就是为什么它不依赖于有效的CSRF令牌。如果您使用django会话在您的API上验证您的用户 - 提供API的django会呈现表单 - 在这种情况下,您具有与上述相同的情况。