【问题标题】:CSRF error django rest framework when using session auth使用会话身份验证时的 CSRF 错误 django rest 框架
【发布时间】:2016-03-18 22:55:44
【问题描述】:

我正在构建一个 api,用于与需要用户登录的移动应用程序交互。仅使用会话身份验证会给我一个 csrf 错误。我可以通过在基本身份验证中提供凭据来修复它,但我认为这并不理想。这将是我第一次为移动设备开发。我打算使用cordova,我不知道是否有办法在用户的设备上存储凭据,或者会话数据是否会自动存储在设备上。如果会话数据将自动存储在移动设备上,那将是理想的选择。是否有其他人在 DRF 会话身份验证方面遇到过类似问题,或者关于这是否是最佳途径的建议?

更新:

我能够通过使用另一个帖子中的这个来消除 csrf 错误:

from rest_framework.authentication import SessionAuthentication

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

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

【问题讨论】:

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


    【解决方案1】:

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

    @csrf_exempt
    

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

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

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

    【讨论】:

    • 我尝试使用@csrf_exempt,但由于我使用的是 django rest 框架,因此它不适用于此视图。我将尝试从设备发送 csrf 令牌,看看是否可行
    猜你喜欢
    • 2014-04-14
    • 2015-08-16
    • 1970-01-01
    • 2013-06-29
    • 2017-09-26
    • 2017-11-02
    • 2020-04-24
    • 2012-09-02
    • 2019-03-01
    相关资源
    最近更新 更多