使用会话身份验证时CSRF错误django rest框架

时间:2015-12-13 11:10:47

标签: python django session authentication django-rest-framework

我正在构建一个api,用于连接需要用户登录的移动应用程序。只是使用session auth给我一个csrf错误。我能够通过提供基本身份验证的凭据来修复它,但我不认为这是理想的。这将是我第一次开发移动设备。我打算使用cordova,但我不知道是否有办法在用户设备上存储凭据,或者会话数据是否会自动存储在设备上。如果会话数据将自动存储在移动设备上,那将是理想的路径。有没有其他人与DRF会话认证有类似的问题,或建议这是否是最好的路线?

更新:

我可以通过另一篇帖子使用此功能来解决csrf错误:

from rest_framework.authentication import SessionAuthentication

class NoCsrfSessionAuthentication(SessionAuthentication):
    def enforce_csrf(self, request):
        return

但这似乎导致request.data参数出错。它一直返回一个空的查询字典。

1 个答案:

答案 0 :(得分:0)

如果您想使用会话身份验证,但有信心可以放弃给定视图的CSRF保护,

@csrf_exempt

decorator会做到这一点。 (如果您使用的是基于类的视图,请查看:https://stackoverflow.com/a/14379073/1375015

由于您使用的是基于会话的身份验证,因此您的移动应用程序必须存储某种会话cookie。因此,您还应该能够存储csrftoken cookie并将其与您的http请求一起发送。然而,即使这样,我过去也会对django CSRF保护框架产生一些麻烦。

也许切换到token authentication是一种选择?