Django - 将用户设置为5秒不活动



在我的Django项目中,我允许用户登录。如果他们输入错误的密码 7 次,他们的帐户将设置为不活动,并返回错误。

我想做的是显示错误消息 5 秒钟,然后允许他们再次尝试。我该怎么做?

我在用户模型中存储一个变量,每次执行不成功的登录时,该变量都会递增。如果达到 7,则显示错误消息。

这是我的代码: models.py:

class User(AbstractUser):
loginAttempts = models.IntegerField(default=0)

views.py:

if user.check_password(data.get("password")):
user.loginAttempts = 0
user.save()
auth.login(request, user)
return JsonResponse({'message': 'Successfully logged in'}, status=200)
else:
user.loginAttempts += 1
user.save()
if user.loginAttempts >= 7:
user.is_active = False
user.save()
return JsonResponse({'message': 'Account Locked.'}, status=400)
else: 
return JsonResponse({'message': 'Oops, username/email or password provided is invalid'}, status=400)

目前,错误消息("帐户锁定"(在 7 次尝试后成功显示,但我想要的是loginTTry变量在 5 秒后重新设置为 0。

我该怎么做?谢谢。

您需要向 User 对象添加一个名为 lastLoginTry 的附加字段。然后,您可以检查上次尝试是否超过5秒。

编辑: 不建议在尝试登录帐户时通知某人他的帐户被冻结了一段时间,因为如果有人想通过尝试一些电子邮件地址来破解帐户,他甚至不知道是否存在具有此电子邮件地址的帐户,他将在收到此回复后知道。因此,只需停留在"ooops,用户/密码无效",并在指定数量的登录尝试后告诉用户他们的帐户将被锁定。

import time
if user.check_password(data.get("password")):
user.loginAttempts = 0
user.save()
auth.login(request, user)
return JsonResponse({'message': 'Successfully logged in'}, status=200)
else:
user.loginAttempts += 1
if user.loginAttempts >= 7:
if time.time() - user.lastFailedLogin >= 5:
user.is_active = True
user.loginAttempts = 0
else:
user.is_active = False
user.lastFailedLogin = time.time()
user.save()
return JsonResponse({'message': 'Oops, username/email or password provided is invalid'}, status=400)

我现在没有太多时间检查它。如果有人发现一些错误左右,请随时编辑我的答案!!

最新更新