Счетчик попыток простого входа с использованием MVC 3 и Ajax - PullRequest
0 голосов
/ 28 августа 2011

Хорошо, это сводит меня с ума.Я, наверное, устал, и ответ смотрит на меня.

 public ActionResult _Login(LoginViewModel loginViewModel)
    {
        if (User.Identity.IsAuthenticated)
        {
            return JavaScript("window.location=" + "'" + loginViewModel.ReturntUrl + "'");
        }
        if (ModelState.IsValid)
        {
            if (Session["loginCount"] == null) //setup the session var with 0 count
            {
                Session.Add("loginCount", 0);
            }
            _loginStatus =  _authenticationService.Authenticate(loginViewModel.SiteLoginViewModel.EmailAddress,
                                                loginViewModel.SiteLoginViewModel.Password);
            if(!_loginStatus.UserExists)
            {
                ModelState.AddModelError("SiteLoginViewModel.EmailAddress", _loginStatus.ErrorMessage);
                return PartialView();
            }
            // This will only be true if the user types in the correct password
            if(!_loginStatus.IsAuthenticated)
            {
                Session["loginCount"] = (int)Session["loginCount"] + 1;
                Response.Write(Session["loginCount"]); // Counter is incremented twice!!!!


                //_userService.SetInvalidLoginAttempts(loginViewModel.SiteLoginViewModel.EmailAddress, 1);


                ModelState.AddModelError("SiteLoginViewModel.EmailAddress", _loginStatus.ErrorMessage);
                return PartialView();
            }

            // DELETE ANY OPENID Cookies
            var openidCookie = new HttpCookie("openid_provider");

            if (openidCookie.Value != null)
            {
                openidCookie.Expires = DateTime.Now.AddDays(-1d);
                Response.Cookies.Add(openidCookie);
            }
            _userService.SetInvalidLoginAttempts(loginViewModel.SiteLoginViewModel.EmailAddress, 0);
            SetAuthTicket(loginViewModel.SiteLoginViewModel.EmailAddress, _userService.GetUserId(loginViewModel.SiteLoginViewModel.EmailAddress),
                                  loginViewModel.SiteLoginViewModel.RemeberLogin);


            if (!string.IsNullOrEmpty(loginViewModel.ReturntUrl))
            {
                return JavaScript("window.location=" + "'" + loginViewModel.ReturntUrl + "'");
            }
            return JavaScript("location.reload(true)");

        }
        return PartialView();
    }

Это почти кажется, что запрос обрабатывается дважды, однако, когда я прохожу через отладчик, я вижу его только один раз.Пожалуйста, игнорируйте не важные части ActionMethod

Ответы [ 2 ]

0 голосов
/ 28 августа 2011

@ @ Это решило проблему и будет удалено, а не закомментировано. Включать это дважды очень плохо, очевидно:)

0 голосов
/ 28 августа 2011

Похоже, что вы привязываетесь к коду для материалов, которые вы автоматически получаете у провайдера .Net.

Ваша первая строка "User.Identity.IsAuthenticated" выглядит так, как будто вы используете часть провайдера членства, но, похоже, все остальные пытаются ее обойти.

Кроме того, почему вы возвращаете JavaScript, чтобы направить браузер пользователя на новый URL? Независимо от того, на какой платформе .net вы работаете, существует множество способов перенаправить браузер пользователя, не возвращая необработанный JavaScript, который в моей книге ДЕЙСТВИТЕЛЬНО ПЛОХО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...