2016-03-17 39 views
1

在我的系統中,用戶首先進入系統並且必須更改其密碼。 我有一個更改密碼的視圖,問題是當頁面重新加載用戶會話丟失並強制用戶重新登錄。 我不知道如何改變這種行爲。我的代碼Django無需再次登錄即可更改密碼

views.py

def change_password(request): 
    if request.method == 'POST': 
     data = request.body 
     change = json.loads(data) 
     id = change["id"] 
     password = change["password"] 
     user = get_object_or_404(CustomUser, pk=id) 
     user.set_password(password) 
     user.save() 
     return HttpResponse('success') 

def login_success(request): 
    if request.user.groups.filter(name="group1").exists(): 
     return redirect(group1) 
    elif request.user.groups.filter(name="group2").exists(): 
     return redirect(group2) 
    elif request.user.groups.filter(name="group3").exists(): 
     return redirect(group3) 
    else: 
     return redirect(group4) 

概述我使用的是CustomUser型號

models.py

class CustomUser(AbstractBaseUser, PermissionsMixin): 

    ... 
    login = models.BooleanField(_('login'), default=False, blank=True)  
    ... 

在我的模板。

{% if user.login %} 
    <h1>Hi User</h1> 

{% else %} 

    <form name="changePass" method="post"> 

    </form> 
{% endif %} 

我需要的用戶保持在即使更改密碼後,我在模板中做的是改變我customuser登錄變量的狀態記錄下來。

我感謝任何答案或幫助,謝謝,併爲我的英語感到抱歉。

回答

8

從版本1.7開始,Django引入了一項新功能,當您更新用戶的密碼時會使當前會話無效。 你可以看到更多關於它在這裏:https://docs.djangoproject.com/en/dev/topics/auth/default/#session-invalidation-on-password-change

所有你需要做的,以避免註銷是django.contrib.auth調用該方法update_session_auth_hash從文檔的例子:

from django.contrib.auth import update_session_auth_hash 


def password_change(request): 
    if request.method == 'POST': 
     form = PasswordChangeForm(user=request.user, data=request.POST) 
     if form.is_valid(): 
      form.save() 
      update_session_auth_hash(request, form.user) 
    else: 
     ... 
相關問題