11

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

到目前为止我已经尝试过:

  1. 在用户配置文件中添加了一个字段,用于存储上次更新密码的日期。
  2. 扩展登录方法以检查此日期并将用户重定向到密码更改页面。

我感到困惑的是:

  1. 在更改密码之前阻止用户访问该站点。
  2. 用户不应该能够登录或只输入 url 来直接访问该页面。

请注意,我不想使用中间件,因为它会限制资源。

4

2 回答 2

13

你似乎在正确的轨道上。设置最后一次更新密码的日期,检查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.
于 2013-03-22T13:52:47.100 回答
0

嗯,有 django-passwords-policies,http ://tarak.github.io/django-password-policies/topics/force.password.change.html

于 2015-05-30T20:20:45.357 回答