2017-07-14 3 views
-1

Actuellement, je fais une application qui utilise Django Rest Framework comme API et iOS (Swift) comme interface avec Alamofire pour les appels d'API. Cependant, j'ai rencontré un problème avec l'authentification des utilisateurs - chaque fois que je tente de faire une demande POST pour connecter un utilisateur à l'aide Alamofire, je suis frappé avec cette erreur 403:Jeton Django CSRF manquant pour iOS Publier une demande

enter image description here

Voici mon login Mise en service avec 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 

     } 
    } 

} 

du côté de l'API, le login J'utilise est celui fourni par rest_framework.urls ...

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

Alors que des conseils de simil a.) Exempter mes vues d'exiger un jeton CSRF (je ne suis pas sûr si c'est même possible dans mon cas - mes vues sont incluses avec include() dans le cadre du régime de rest_framework.urls si la décoration avec csrf_exempt ne peut pas travailler)

b.) Obtenir un jeton CSRF pour mes requêtes POST en quelque sorte

alors que ce sont mes idées, je n'ai pas encore trouver une solution réelle ou une méthode pour les implémenter, donc toute aide serait grandement appréciée!

+0

Emettez une requête get dans le jeton de capture csrf de connexion, puis utilisez-la dans la requête POST. –

+0

Si vous utilisez des vues basées sur les classes, assurez-vous d'ajouter _ViewName.as_view() _ dans urls.py. Cela a fonctionné pour moi! – Mirza715

Répondre

0

L'authentification basée sur la session n'est pas requise si vous créez des API pour n'importe quelle application mobile. Si vous n'utilisez pas de cookies pour gérer vos sessions, vous n'avez besoin d'aucune protection CSRF. Ai-je tort ? mais de toute façon si vous voulez le faire, passez @csrf_exempt

Au lieu de cela, il est préférable d'utiliser l'authentification par jeton. Vous pouvez le vérifier ici dans le django -rest-api-docs. L'authentification par jeton est appropriée pour les configurations client-serveur, telles que les clients de bureau et mobiles natifs.