2017-01-19 53 views
0

我正在爲我的Django應用程序編寫change password功能,允許用戶隨意更改其密碼。一個要求是用戶在繼續更改之前必須重新提交原始密碼。如何根據另一個視圖的結果隔離Django視圖

負責reauth of original passwordenter new password的視圖被映射到兩個單獨的URL。目前它的設置方式,只需點擊正確的url即可直接進入enter new password的部分功能。我需要制定reauth of original password強制性的,因此目前的功能是不可接受的。

重新設計此功能的最佳策略是什麼,以便重置密碼在reauth要求之後關閉?我想到的一件事是在成功的reauth時將標誌設置爲會話變量,並且只有在正確設置了所述標誌的情況下才允許密碼重置。但我希望可以有一個更強大的方式?

我當前的代碼是:

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/') 

要開始了,如果密鑰「第一」並不在會話變量存在,並會重定向到第一頁第二頁將不會呈現。

,當我得到一個POST請求對會話對象創建一個令牌,隨後,我們被重定向到現在令牌存在,第二頁被呈現在第二頁的第一頁。

一定要在適當的時候刪除會話密鑰。我建議在第二頁呈現時刪除令牌。

+0

夠公平的。順便說一句,你還可以解釋爲什麼你選擇在這種情況下使用csrf_exempt裝飾器? –

+0

順便說一句,這也是我想到的方法。缺點是它不是氣密的,可能存在安全問題。 –

+0

使用裝飾器允許表單發佈。 – chatuur

相關問題