2016-11-15 24 views
1

私の学校の登録ウェブサイトを作成していて、フレームワークにDjangoを使用しています。登録には、ユーザー名、パスワード、登録トークンが必要です。これらはまだ検証されていませんが、私が今行っているのは、登録要求ページ(POST要求を使用)から「登録済み」ページに移動することだけです。行のどこかで、csrfトークンが検証されていると思われます。Django 403 CSRF検証に失敗しました

マイビュー:

def register(request): 
    return render(request, 'enroller/successfulEnroll.html') 

マイページ:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
</head> 
<body> 
    <form action="{% url 'register' %}" method="post"> {% csrf_token %} 
    <div class="container"> 
     <label><b>New Username</b></label> 
     <input type="text" placeholder="Username" name="uname" required> 
     <br> 
     <label><b>Password</b></label> 
     <input type="password" placeholder="Password" name="psw" required> 
     <br> 
     <label><b>Registration Password</b></label> 
     <input type="text" placeholder="Registration Key" name="reg" required> 
     <br> 
     <input type="submit" value="Register" /> 
    </div> 
    </form> 
</body> 
</html> 

は、私は成功のページへの登録ページから行くしようとすると、それは私にエラー403を与える(CSRF検証が失敗した要求を。中止)。しかし、URL mysite.com/register/に行くと、エラーなしでリクエストしたページが返されます。

これを修正する方法はありますか?私はRequestContextを見てきましたが、どこで使用されるかは完全にはわかりません。

+1

csrfの1.10ドキュメントには、使用しているレンダリング機能(インポートされたdjangoのレンダリングを前提とする)がRequestContextをカバーする必要があることが記載されています。あなたが今までに示したコードは上手く見えます。ミドルウェアの設定、サイト設定のどこかに別の問題がある可能性がありますが、あなたが投稿したコードではうまくいきません。 GETリクエストのブラウザを使用してURLに直接行く場合、CSRFは実際には関係ありません。成功したフォーム処理の後に、別の成功ビューを持ち、HttpResponseRedirectを実行することを検討する価値があります。 –

答えて

0

正常に動作しました。ダニエルは正しかった - それは私のミドルウェアの設定に問題でした。私はsettings.pyのミドルウェア配列の前に2行追加しました。

SESSION_COOKIE_SECURE = True 
SESSION_EXPIRE_AT_BROWSER_CLOSE = True 

私はそれが働いた、または問題が正確に何であったか、なぜ私は完全に確信していると言うことはできませんが、それが動作するようになりました。ダニエルありがとう!

0

このメソッドを使用できます。そしてdjangバージョンは1.11.1

from django.shortcuts import render 
from django.template.context_processors import csrf 

form = LoginForm() 
c = {'form': form} 
c.update(csrf(request)) 
return render(request, 'a_template.html', c) 

である私は、私にとってhttp://djangobook.com/security-in-django/
で、この方法を発見した細かい作業ではなく、最高の、より多くの行ので。

関連する問題