【发布时间】: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