ASP.NET MVC登录不粘

时间:2014-12-19 14:16:33

标签: asp.net-mvc asp.net-mvc-5 simplemembership

我的ASP.NET MVC 5简单会员提供程序登录代码存在问题。代码如下:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginViewModel model, string returnUrl)
    {
        bool active = true;

        if (ModelState.IsValid && WebSecurity.Login(model.Email, model.Password, persistCookie: model.RememberMe))
        {
            UserDetail userModel = UserDetail.Initialize(model.Email);
            FormsAuthentication.SetAuthCookie(model.Email, true);

            active = userModel.ActiveBit;

            if (active)
            {
                return Redirect("~/");
            }
            else
            {
                WebSecurity.Logout();
                ModelState.AddModelError("", "Account is inactive.");
            }
        }
        else
        {
            ModelState.AddModelError("", "*Either the Username or Password provided is incorrect.");
        }

        return View(model);
    }

登录过程成功,我可以在浏览器中看到身份验证cookie(.ASPXAUTH)。问题出现在下一页请求上。身份验证cookie被传递回服务器,但服务器似乎没有登录记录了。当我设置断点并在处理登录并请求新页面后检查(在完成登录后重定向之后),User.Identity.IsAuthenticated与WebSecurity.IsAuthenticated和WebSecurity.HasUserID一样为假。 WebSecurity.CurrentUserId为-1,WebSecurity.CurrentUserName为空字符串。

由于我成功进行了身份验证,因此它不是数据库连接问题。我做了往返服务器的回程,我仍然没有通过身份验证,所以我在CurrentUser == -1看到的常见答案似乎并不适用。

我是MVC的相对新手,但是我有一个同事在看这个代码时获得了不错的经验,他也找不到任何东西。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

默认情况下,asp.net MVC5 web.config不支持FormsAuthentication,请检查Web配置文件的以下部分,如果要使用FormsAuthentication,请删除"<remove name="FormsAuthentication" />"

 <system.webServer>
    <modules>
      <remove name="FormsAuthentication" />
    </modules>
  </system.webServer>

身份验证超时配置

<system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
</system.web>

希望这有帮助。