Django强制密码到期

时间:2013-03-22 13:04:15

标签: django passwords

是否有任何django应用程序在30天等特定间隔后强行过期用户密码?我正在使用djangp的auth并希望扩展它或使用社区应用程序。

到目前为止我尝试过:

  1. 在用户个人资料中添加了一个字段,用于存储上次更新密码的日期。
  2. 扩展登录方法以检查此日期并将用户重定向到密码更改页面。
  3. 我对此感到困惑:

    1. 阻止用户访问网站,直到密码更改为止。
    2. 用户无法登录或只是输入网址直接访问该页面。
    3. 请注意,我不想使用中间件,因为它会成为资源限制。

2 个答案:

答案 0 :(得分:11)

你似乎走在正确的轨道上。设置更新上次密码的日期,检查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.

答案 1 :(得分:0)