ahmed_sa Ответов: 1

Как сделать подсчет попыток входа в систему в течение периода ?


Я работаю на функциональность веб-API, логин и мне нужно сделать счетчик попыток входа в систему в течение периода
Как это сделать .
это будет сделано по отдельному действию или как

Что я уже пробовал:

public class Users
    {
        public string UserName { get; set; }
        public string Password { get; set; }
        public string MessageStatus { get; set; }
        public int StatusCode { get; set; }
        public string StatusText { get; set; }
        public string IpAddress { get; set; }
        public List<Branches> Branches { get; set; }
        public string LoginTime { get; set; }
        public string AccessToken { get; set; }
    }
[HttpPost(Contracts.ApiRoutes.Login.PostUserLogin)]
        public  IActionResult PostUserLogins([FromBody]Users user)
        {
            string JsonResults = "";
            int LoginStatus = _AuthunticateService.PostUserLogin(user.UserName,user.Password ,out DataTable dtBranches,out string errorMessage, out int statusCode);
            
             if(LoginStatus == 1)
            {
                user.StatusCode = statusCode;
                user.StatusText = "failed";
                user.MessageStatus = "login failed, incorrect username or password";
               

            }
            else if(LoginStatus == 2)
            {
                user.StatusCode = statusCode;
                user.StatusText = "failed";
                user.MessageStatus = "password has expired!";
                
            }
            return Ok(JsonResults);
        }

public int PostUserLogin(string UserId, string Password, out DataTable dtGetBranches, out string errorMessage, out int statusCode)
        {
            statusCode = 0;
            bool IsUserValid = false;
            dtGetBranches = null;
            errorMessage = null;

            if (!string.IsNullOrEmpty(UserId))
            {

          //how to check login prompt count 
               // check user validation
                if (IsUserValid)
                {
                    statusCode = 0;
                    IsUserValid = true;
                  //get user branches 
//get user id 
                }
                else
                {
                    statusCode = 1;
                    IsUserValid = false;
                    errorMessage = string.Format("Invalid User Name {0} Or Password {1}", UserId, Password);
                }

            }
            return statusCode;
        }

1 Ответов

Рейтинг:
1

OriginalGriff

Лучший способ-это вести таблицу БД, которая записывает все попытки входа в систему и успешность этой попытки. Это довольно просто: все, что ему нужно, - это четыре столбца (ID, UserID, Timestamp, Success). Каждый раз, когда попытка предпринята, добавить новую строку. Затем вы можете отслеживать сбои с помощью простого выбора из вашей БД на индивидуальной основе.


ahmed_sa

не могли бы вы дать мне более подробную информацию, если это возможно, пожалуйста ?

OriginalGriff

- О чем же?
Какую часть этого трудно понять?

ahmed_sa

Затем вы можете отслеживать сбои с помощью простого выбора из вашей БД на индивидуальной основе.

OriginalGriff

Вы знаете, как использовать SELECT from a database, да?
Поэтому выберите все строки для конкретного пользователя ("... Где UserID = ..." или аналогично) упорядочить по метке времени DESC, и он вернет все строки с временем и кодом успеха / неудачи. Из этого вы можете считать их, делать с ними все, что угодно.
Или вы можете вернуть только неудачные попытки с момента последнего успеха с подзапросом.
Довольно тривиальный SQL, так какая же часть сложна для вас?

ahmed_sa

я спрошу вас еще раз можете ли вы показать мне код psudo пожалуйста я делаю следующие шаги
1 - создайте таблицу loginattempt UserId,TimeStamp,success
2 - Выберите * из loginattempt, где userid=@userid порядок по метке времени
что я буду делать после этого, пожалуйста ?