2017-07-14 80 views
-1

目前,我正在使用Django Rest Framework作爲我的API和iOS(Swift)作爲使用Alamofire進行API調用的前端。不過,我碰到的一個問題,用戶認證 - 每當我試圖做一個POST請求登錄使用Alamofire用戶,我打這個403錯誤:Django CSRF令牌缺少iOS發佈請求

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')) 

雖然從simil意見AR帖子還沒有解決我的問題,我相信我的選擇是

a。)豁免我的意見,從需要一個CSRF令牌(我不知道是否甚至可能在我的情況 - 我的意見是與include()作爲rest_framework.urls方案的一部分,因此與csrf_exempt裝潢無法工作)

灣)獲得一個CSRF令牌我POST請求莫名其妙

雖然這些是我的想法,我還沒有找到一個實際的解決方案或實施它們的方法,所以任何幫助將不勝感激!

+0

在登錄捕獲csrf令牌中發出get請求,然後在POST請求中使用它。 –

+0

如果您使用基於類的視圖,請確保在urls.py中添加_ViewName.as_view()_。它爲我工作! – Mirza715

回答

0

如果您正在爲任何移動應用程序構建API,則不需要基於會話的身份驗證。如果您不使用cookie來管理會話,則不需要任何CSRF保護。我錯了嗎 ?但無論如何,如果你想這樣做,通過@csrf_exempt

而不是,它是更好的使用基於令牌的身份驗證。您可以在這裏檢查它在django -rest-api-docs。令牌身份驗證適用於客戶端 - 服務器設置,例如本機桌面和移動客戶端。