使用MVC 3和Ajax的简单登录尝试计数器

时间:2011-08-28 16:45:22

标签: asp.net-mvc-3

好的,这让我疯了。我可能累了,答案正在看着我。

 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 :(得分:0)

@ @ 这解决了问题,将被删除而不是注释掉。包括这两次显然非常糟糕:)

答案 1 :(得分:-1)

看起来你正在为你自动获得的.Net的会员提供商提供的代码进行编码。

您的第一行“User.Identity.IsAuthenticated”看起来您正在使用会员提供商的一部分,但似乎剩下的就是尝试围绕它进行编码。

另外,为什么要返回javascript来将用户的浏览器定向到新的URL?无论您使用什么.net平台,都有很多方法可以重定向用户的浏览器,而无需返回原始的javascript,这在我的书中真的很糟糕。