2013-03-22 108 views
8

是否有任何django應用程序強制在30天之後的某個時間間隔後過期用戶的密碼?我正在使用djangp的身份驗證,並希望擴展它或使用社區應用程序。Django強制密碼過期

我迄今爲止嘗試:

  1. 添加到用戶配置文件字段用於存儲上次密碼更新的日期。
  2. 擴展登錄方法以檢查此日期並將用戶重定向到密碼更改頁面。

我什麼困惑:

  1. 耕種更改密碼阻止用戶訪問該網站。
  2. 用戶不應該能夠登錄或只需鍵入網址直接訪問該頁面。

請注意,我不想使用中間件,因爲它會成爲資源限制。

回答

9

你似乎走在正確的軌道上。設置上次密碼更新的日期,檢查timedelta是否大於30天,如果是,則重定向到更改密碼頁面。您的登錄視圖應基本保持不變,但如果timedelta大於30天,實際上不會將用戶登錄到請求對象。

from datetime import date, timedelta 
from django.contrib.auth import authenticate, login 

def my_view(request): 
    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      if date.today() - user.password_date > timedelta(days=30): 
       # Redirect to password change page 
      else: 
       login(request, user) 
       # Redirect to a success page. 
     else: 
      # Return a 'disabled account' error message 
    else: 
    # Return an 'invalid login' error message. 
+0

這是有道理的,馬特。我會試試這個。謝謝 – 2013-03-24 01:08:59