2013-03-22 83 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