ASP.NET Actionresults для форм одна за другой, выполняется до заполнения форм - PullRequest
0 голосов
/ 21 октября 2018

У меня есть решение для школьного проекта, как пользователь может сбросить свой пароль.Я полностью осведомлен о проблеме безопасности, касающейся слабой проверки.Решение переходит из формы в форму представления , тогда как CustomerViewModel заполняется по частям.Функция работает, но моя конкретная проблема:

ResetPassWord и CheckUser оба проходят один раз перед остановкой и становятся заполняемыми.Затем, после того как они заполнены, они корректно запускаются после того, как пользователь нажал кнопку отправки.Это дает две проблемы.

1.

Проверка полей проверяется перед вводом ввода.Таким образом, в основном пользователю говорят, что он делает это неправильно, прежде чем он начал.

2.

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

Я пробовал разные версии [httpPost], [httpPut] и [httpGet].Проблема, вероятно, в моем понимании этого.

    //CHANGE PASSWORD 
    // TODO: CheckUser and ResetPassWord are called mulitple times, so they will go through the method once, before the user can give inputs. How to fix? HTTPOS seemingly cant be used on all of them.

CustomerController : Controller{
    public ActionResult ChangePassWord()
    {
        return View(new CustomerVM());

    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult ChangePassWord(CustomerVM customer)
    {
        if (_customerBLL.FindEMail(customer.Email))
        {
            return RedirectToAction("CheckUser", customer);

        }
        else
        {
            return RedirectToAction("VisMelding", "Home", new { overskrift = "Email adressen er feil", melding = "" });
        }
    }


    public ActionResult CheckUser(CustomerVM customer)
    {`BREAKS THE METHOD THE FIRST RUN`
        if(customer.FirstName == null){
            return View(customer);
        }

        //Check FirstName, SurName and PhoneNR
        if (_customerBLL.CheckPersonalia(customer))
        {
            // TODO: Solution to block user for a while after multiple wrong entries.
            return RedirectToAction("ResetPassWord", customer);

        }
        else
        {
            return RedirectToAction("VisMelding", "Home", new { overskrift = "Noe gikk feil", melding = "Pass på at all personalien er korrekt og prøv igjen." });
        }
    }



    public ActionResult ResetPassWord(CustomerVM customer)
    {`BREAKS THE METHOD THE FIRST RUN`
    if(customer.PassWord==null){
            return View(customer);
    }

        if (customer.PassWord == customer.PassWordRepeat)
        {
            if (_customerBLL.ResetPassword(customer))
            {
                return RedirectToAction("VisMelding", "Home", new { overskrift = "Passord er nå resatt", melding = "Du kan nå logge på igjen med din bruker, med nytt passord." });
            }
        }
        return View(customer);
    }
}
...