【问题标题】:Django CSRF Token Missing For iOS Post RequestiOS 发布请求缺少 Django CSRF 令牌
【发布时间】:2017-12-19 02:37:45
【问题描述】:

目前,我正在制作一个应用程序,它使用 Django Rest Framework 作为我的 API,iOS (Swift) 作为我的前端,使用 Alamofire 进行 API 调用。但是,我遇到了用户身份验证问题 - 每当我尝试发出 POST 请求以使用 Alamofire 登录用户时,都会遇到以下 403 错误:

这是我使用 Alamofire 的登录设置:

func loginUser(data: Parameters) {
    let finalUrl = self.generateUrl(addition: "auth/login/")
    print(finalUrl)
    let header: HTTPHeaders = [ "Accept": "application/json", "Content-Type" :"application/json"]

    Alamofire.request(finalUrl,method: .post, parameters: data, encoding: JSONEncoding.default, headers: header).responseString { (response:DataResponse<String>) in
        print(data)
        switch(response.result) {
        case .success(_):
            if response.result.value != nil {
                print(response.result.value!)
            }
            break

        case .failure(_):
            print(response.result.error!)
            break

        }
    }

}

在API方面,我使用的登录是rest_framework.urls提供的...

url(r'^auth/', include('rest_framework.urls', namespace='rest_framework'))

虽然类似帖子的建议没有解决我的问题,但我相信我的选择是

a.) 免除我的视图需要 CSRF 令牌(我不确定在我的情况下是否可能 - 我的视图与 include() 捆绑在一起作为 rest_framework.urls 方案的一部分,因此使用 csrf_exempt 进行装饰无法工作)

b.)以某种方式为我的 POST 请求获取 CSRF 令牌

虽然这些是我的想法,但我还没有找到实际的解决方案或方法来实现它们,因此非常感谢任何帮助!

【问题讨论】:

  • 在登录捕获 csrf 令牌中发出 get 请求,然后在 POST 请求中使用它。
  • 如果您使用基于类的视图,请确保在 urls.py 中添加 ViewName.as_view()。它对我有用!

标签: ios django rest alamofire django-csrf


【解决方案1】:

如果您正在为任何移动应用构建 API,则不需要基于会话的身份验证。如果您不使用 cookie 来管理会话,则不需要任何 CSRF 保护。我错了吗 ?但无论如何,如果你想这样做,请通过@csrf_exempt

最好使用基于令牌的身份验证。您可以在django -rest-api-docs 中查看它。令牌身份验证适用于客户端-服务器设置,例如本机桌面和移动客户端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2015-04-08
    • 2018-05-04
    相关资源
    最近更新 更多