2012-03-13 3 views
0

私はPinaxを使用しており、requestsモジュールを使用してaccountプロジェクトでログインテストを実行しようとしています。受け取りました403 python要求をログに記録するとCSRF検証に失敗しました

私は返さこの

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 

クッキーが空でありませんでした! getメソッドでは、私はクッキーを取得します。この問題の原因は何ですか?

r.text結果:

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

私はcookiesに固執しようとしたが、それはまだ私に403エラーが発生しました。

答えて

2

あなたの投稿はCSRFトークンをログインに渡していません。

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

テスト駆動開発をやっている場合

はありがとうClientを調べる価値があるかもしれません。私もそれをやろうとしていました。私はこれのようにインポートする必要がありますか? 'from django.middleware import csrf' – CppLearner

+0

はい、正しいです。 – Furbeenator

0

CSRFは、さまざまなトークンを含む非表示フィールドをフォームに追加し、フォームがポストされたときにテストします。投稿にトークンを含めていないため、このエラーが発生しています。あなたはそれを回避したり、オフにしたり、 "適切な"単体テストを使用することができます。

See the CSRF documentation。あなたは