2012-03-13 2 views
0

J'utilise Pinax, et j'essaie d'effectuer un test de connexion sur account projet, en utilisant requests module.Reçu 403 vérification CSRF a échoué lors de la connexion par le biais de demandes python

Je l'ai fait

def test001_login(self): 
    #cookies = {'csrftoken': 'a8356fd05b25fad7004994fd5da89596'} 
    r = requests.post(self.loginurl, data={'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True) 

    print r.status_code 
    print r.text 
    print r.cookies 

Cookie retourné est vide !! Avec la méthode get, j'obtiens un cookie. Qu'est-ce qui cause ce problème?

r.text Résultat:

<p>Reason given for failure:</p> 
    <pre> 
    No CSRF or session cookie. 
    </pre> 

    <p>In general, this can occur when there is a genuine Cross Site Request Forgery, or when 
    <a 
    href='http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf'>Django's 
    CSRF mechanism</a> has not been used correctly. For POST forms, you need to 
    ensure:</p> 

J'ai essayé de coller dans cookies mais il m'a donné encore erreur 403.

Répondre

2

Votre publication ne transmet pas le jeton CSRF à la connexion. Est-ce que cela fonctionne:

r = requests.post(self.loginurl, data={'csrf_token': django.middleware.csrf.get_token(), 'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True) 
+0

Merci. J'allais le faire aussi. Suis-je censé importer comme ça? 'de django.middleware importer csrf' – CppLearner

+0

Oui, c'est correct. – Furbeenator

0

CSRF fonctionne en ajoutant un champ caché contenant un jeton variable dans le formulaire puis en le testant lorsque le formulaire est posté. Vous obtenez cette erreur car vous n'avez pas inclus le jeton dans le message. Vous pouvez contourner ce problème, ou l'éteindre, ou utiliser le "bon" appareil de test.

See the CSRF documentation.

pourrait être utile regardant Client si vous faites le développement piloté par les tests

Questions connexes