2017-01-19 6 views
0

私はDjangoアプリケーションのためにchange password機能を書いています。これによりユーザーは自由にパスワードを変更できます。 1つの要件は、ユーザーが元のパスワードを変更する前に再送信する必要があることです。別のビューの結果に基づいてDjangoビューを壁から外す方法

reauth of original passwordおよびenter new passwordの責任は、2つの別々のURLにマップされます。現在のところ、設定されている方法では、右のURLを押すだけで、機能の一部であるenter new passwordに直接アクセスできます。私はreauth of original passwordを強制する必要があるため、現在の機能は受け入れられません。

この機能を再設計して、リセットパスワードが再認証要件の背後にあるようにするための最良の戦略は何ですか?私の頭に浮かべていることの1つは、成功した再起動時にセッション変数としてフラグを設定し、前記フラグが正しく設定されている場合にのみパスワードをリセットできることです。しかし、私はもっと頑丈な方法があると思っていますか?

私の現在のコードは次のとおりです。これはそれを行うための最善の方法であると私は、私はこの方法がでどのように安全なの知りませんを強調したい場合、私は知らない

def reset_password(request,*args,**kwargs): 
    if request.method == 'POST': 
     form = ResetPasswordForm(data=request.POST,request=request) 
     if form.is_valid(): 
      #save new password hash 
     else: 
      context={'form':form} 
      return render(request,'reset_password.html',context)  
    else: 
     form = ResetPasswordForm() 
     context={'form':form} 
     return render(request,'reset_password.html',context) 

def reauth(request, *args, **kwargs): 
    if request.method == 'POST': 
     form = ReauthForm(data=request.POST,request=request) 
     if form.is_valid(): 
      return redirect("reset_password") 
     else: 
      context={'form':form} 
      return render(request, 'reauth.html', context) 
    else: 
     form = ReauthForm() 
     context = {'form':form} 
     return render(request, 'reauth.html', context) 

答えて

0

が、これはセッションを介して行うことができます。ここで

がオフに開始するには、例です

@csrf_exempt 
def render_first_page(request): 
    if request.method == 'POST': 
     request.session['first'] = True 
     print (request.session['first']) 
     return redirect('/second/') 
    try: 
     del request.session['first'] 
    except KeyError: 
     pass 

    return HttpResponse("<form method='POST'><input type='text' name='test'/><input type='submit'/></form>") 

def render_second_page(request): 

    try: 
     if request.session['first'] == True: 
      return HttpResponse("Welcome to Second Page") 
    except KeyError: 
     print ("No first") 
     return redirect('/first/') 

キーは「最初の」セッション変数に存在しないと、最初のページにリダイレクトされる場合は、2番目のページが表示されません。

最初のページで、POSTリクエストを受け取ると、セッションオブジェクトにトークンが作成され、その後、トークンが存在し、2番目のページがレンダリングされる2番目のページにリダイレクトされます。

セッションキーは、適切なタイミングで削除してください。私は2番目のページがレンダリングされるときにトークンを削除することをお勧めします。

+0

かなり十分です。この場合、csrf_exemptデコレータを使用することを選択した理由についても説明できますか? –

+0

Btwこれも私が考えていたアプローチです。短所は気密ではないことであり、セキュリティ上の問題がある可能性があります。 –

+0

デコレータを使用してフォームに投稿を許可します。 – chatuur

関連する問題