Блокировать пользователей после слишком многих неудачных попыток входа в систему

Я ищу наиболее элегантный способ блокировки учетной записи пользователя Django после нескольких неудачных попыток входа в систему.

"Что я пробовал?" :

Я смотрел безуспешно для подобных вопросов на SO (Если этот вопрос дублирован, напишите комментарий, чтобы удалить этот).

На данный момент я ищу опыт других разработчиков. Я бы предпочел не говорить о том, что я пробовал, чтобы не отвечать на эти вопросы.

В качестве дополнительной информации приложение не поддерживает UserProfile (но, конечно, я могу включить его, если он того стоит).

Ответ 2

Мы использовали django-lockout, и он работал очень хорошо

ОБНОВЛЕНИЕ: последний выпуск django-lockout был 2011: https://pypi.org/project/django-lockout/. Проект Github больше не существует (404).

Ответ 3

Одним простым решением было бы создать переменную в профиле пользователя, которая будет инициализирована 0 и увеличена на 1 каждый раз, когда пользователь безуспешно пытается войти в систему. Если эта переменная достигает определенного порога (который проверяется каждый раз, когда пользователь пытается войти в систему), учетная запись пользователя может быть приостановлена. Конечно, когда пользователь делает успешную регистрацию, переменная должна быть установлена ​​на 0.

Ответ 4

Создайте модель под названием "failed_logins" с двумя полями, поле "Пользователь" /внешний ключ и поле "Временная метка".

Когда пользователь успешно войдет в систему, удалите все записи "failed_logins" для этого пользователя.

Когда пользователь безуспешно входит в систему, создайте запись в "failed_logins" для этого пользователя с текущей меткой времени.

При каждой попытке входа для данного пользователя перед проверкой правильности/неправильности пароля:

  • запустите запрос, удалив все записи "failed_logins" старше 15 минут (или с периодом времени/времени).

  • запустите запрос, проверяющий количество записей в файлах fail_logins для пользователя, пытающегося войти в систему. Если он 5, убейте попытку входа в систему, уведомив пользователя, что они заблокированы из своей учетной записи, и попробуйте вернуться через некоторое время.

Результат: Пользователи заблокированы после 5 неудачных попыток входа в систему на короткое время.

Ответ 5

Вы можете попробовать этот фрагмент:

<?php
session_start();

$conn = mysql_connect("localhost","root","root");
$select = mysql_select_db("Gayathri",$conn) or die("connection error");

if(isset($_COOKIE['login'])&&$_COOKIE['login']>=3){
echo " you have to wait for sometimes to enable your login"."<br>";
}

if(isset($_POST["username"],$_POST["userpassword"])){
    $username = $_POST['username'];
    $userpassword = $_POST['userpassword'];

    $query = "SELECT * from userlogin where username='".$username."' and userpassword='".$userpassword."'";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);

if($row){
    echo"login successfull";
}
else{
    echo"Invalid password"."<br>";
if(isset($_COOKIE['login'])){
    $attempts=$_COOKIE['login']+1;
       }else{
    $attempts=1;
}
setcookie('login', $attempts, time()+60*60);
}

}
?>
<form method = "post" action = "">
<table border=1>
<tr>
    <td>Username:</td>

    <td><input type="text" name="username" value=""></td>
</tr>
<tr>
    <td>Userpassword:</td>

    <td><input type="password" name="userpassword" value=""></td>
</tr>
<tr>
    <td colspan="2" align=center><input type="submit" name="submit" value="login"></td>
</tr>
</table>