Подсчет неудачных попыток входа и блокировки пользователя в Django - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь подсчитать количество неверных попыток входа в систему, используя метод user_login_failed_callback. Как показано в приведенном ниже коде, я пытаюсь получить доступ к предыдущему значению поля базы данных «failed_login_count» из метода «user_login_failed_callback». Я обновлю значение failed_login_count до failed_login_count + 1, а также обновлю дату и время до текущего времени.

В настоящее время я получаю доступ к «failed_login_count» из «user.get_profile ()». Я знаю, что не так. Не могли бы вы указать правильный способ доступа к полям модели BruteForceEntry failed_login_count.

Мои вопросы

  1. Поэтому не могли бы вы сообщить мне, как я могу получить доступ к failed_login_count из базы данных и обновите существующее значение.

  2. Как показано в приведенном ниже коде, я использую «BruteForceEntry.objects.filter» для обновления строки существующей базы данных. Так что это правильный способ обновления таблицы.

  3. Как заблокировать учетную запись пользователя после более чем 10 неудачных попыток входа в систему.

Возможно пожалуйста, помогите мне.

class BruteForceEntry(models.Model):

    user = models.ForeignKey(User, unique=True)
    username = models.CharField(max_length=256, null=True)
    data_time_of_last_unsuccessful_login = models.DateTimeField(auto_now=True, blank=True)
    failed_login_count = models.IntegerField(default=0)

    def __unicode__(self):
        return '{0} - {1} - {2}'.format(self.username, self.data_time_of_last_unsuccessful_login, self.failed_login_count)

    def __str__(self):
        return '{0} - {1} - {2}'.format(self.username, self.data_time_of_last_unsuccessful_login, self.failed_login_count)

@receiver(user_login_failed)
def user_login_failed_callback(sender, credentials, **kwargs):
    username = credentials['username']
    user = User.objects.get(username=username)
    profile = user.get_profile()
    failed_login_count = profile.failed_login_count + 1

    BruteForceEntry.objects.filter(username=username).update(data_time_of_last_unsuccessful_login=timezone.now(), failed_login_count=failed_login_count)
    
...