2012-01-22 26 views
9

私はいくつかの認証動作をチェックしています。このテストでは、私は明示的にCSRFの動作を確認する必要があるので、私はTrueにテストクライアントenforce_csrf_checksセット使用しています:私の質問は私が手動で送信するにはCSRFトークンを取得するための最も簡単な方法は何、であるテスト時に手動でCSRFトークンを取得する

self.csrf_client = Client(enforce_csrf_checks=True) 

を私はそのクライアントに行うつもりのPOST要求ですか?

csrf(request)を返すカスタムテストビューを定義し、そのビューにリクエストを行い、CSRFトークンを抽出してPOSTリクエストで使用するか、CSRFトークンを取得するのが簡単な方法がありますか使用する?

+0

あなたは、このための解決策を見つけますか?セレンテストのためにcsrftokenクッキーを設定する目的で、csrfトークンに似た問題が発生しています。 –

答えて

11

私はこれは古い質問だと知っていますが、解決策を探している間にこれを見つけましたが、他の誰かがこれに問題がある場合に備えて解決策を共有したいと思っていました。

あなたがログインし、私は次のことをしなければならなかった、それをアクセスするために、後にCSRFトークンが実際にクッキーに保存されています。

self.client = Client(enforce_csrf_checks=True) 
self.client.login(username='temporary', password='temporary') 
self.client.get("/url_to_the_form/") 
csrf_token = self.client.cookies['csrftoken'].value 
1

CSRFトークンは、クッキー("csrftoken")としてクライアントに送信されるはずです。クライアントは、その要求に応じてそのクッキーを送り返すことが期待されます。 Clientは必要な場所にクッキーをコピーできますか?

+0

これはデフォルトで 'csrftoken'です –

+2

答えを気に入っていますが、実際には本当に答えていません。私は、おそらく 'django.middleware.csrf.get_token()'のようなものを使って、ビューに触れることなく自動的にトークンを生成する方法があればもっと探していました。 –

+0

私はそれ以上の助けになるほどの情報がありません。これはおそらく、私があなたのユニットテストフレームワークを完全に理解していないため、テストの仕組みとテスターがアクセスできるものについての欠落した詳細を推測することができないためです。 –

関連する問題