Django CSRF令牌缺少iOS发布请求

时间:2017-07-14 05:38:56

标签: ios django rest alamofire django-csrf

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

enter image description here

以下是我使用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令牌

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

1 个答案:

答案 0 :(得分:0)

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

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