Django:按时间限制用户的会话

时间:2016-05-18 13:03:51

标签: django authentication

我正在开发应用程序,我需要限制登录的能力,并在当天的指定时间进行身份验证。我们说从早上8点到下午5点。为了限制登录的能力,我创建了一个自定义身份验证后端,authenticate()方法仅在当前时间在允许的时间段内时返回用户对象。

现在我想在指定时间后终止用户的auth会话。

设置会话expiry_date日期和cookie Expiry似乎是实现这一目标的最佳方式,但在阅读Django文档并深入挖掘源代码一段时间后,我找不到一个好的解决方案它。我该怎么做呢?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

更改auth后端可能不是您正在寻找的解决方案(至少我不推荐它),因为您正在更改应用程序的安全关键部分。

我建议使用custom middleware:如果注册用户在上午8点到下午5点之间尝试访问您的网站,他们会看到警告说该网站无法使用。

from django.utils import timezone
from django.core.exceptions import PermissionDenied

class AccessRestrictionMiddleware:
    def process_request(self, request):
        current_hour = timezone.now().hour
        is_time_restricted = current_hour >= 8 and current_hour < 17
        if request.user.is_authenticated() and is_time_restricted:
           raise PermissionDenied