我正在开发应用程序,我需要限制登录的能力,并在当天的指定时间进行身份验证。我们说从早上8点到下午5点。为了限制登录的能力,我创建了一个自定义身份验证后端,authenticate()
方法仅在当前时间在允许的时间段内时返回用户对象。
现在我想在指定时间后终止用户的auth会话。
设置会话expiry_date
日期和cookie Expiry
似乎是实现这一目标的最佳方式,但在阅读Django文档并深入挖掘源代码一段时间后,我找不到一个好的解决方案它。我该怎么做呢?任何帮助表示赞赏。
答案 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