MVC5表单身份验证不起作用

时间:2014-12-03 21:54:19

标签: asp.net-mvc forms-authentication

我对.NET和安全性非常陌生。我已选择实施表单身份验证(如果我应该使用其他内容,请更正我)。从我在互联网上收集的内容中,我做了以下操作,但它没有工作:

的Web.config

<authentication mode="Forms">
   <forms loginUrl="~/Home/Index" timeout="30" />
</authentication>

HTTPPost ajax登录方法:

 [HttpPost]
        public ActionResult Login(LoginInputModel loginModel)
        {
            if (ModelState.IsValid)
            {
                var success = UserService.Login(loginModel.Password, loginModel.Email);
                if (success)
                {
                    return Json(new { Url = Url.Action("Index","Home") });
                }
                loginModel.ErrorMessages = "Failed to log in with these credentials. Please try again.";
                return PartialView("Widgets/Login/_LoginInput", loginModel);
            }
            return PartialView("Widgets/Login/_LoginInput", loginModel);
        }

使用UserService类中的实际登录代码:

  public static bool Login(string password, string email)
        {
            var user = Connector.GetUserByCredentials(password, email);
            if (user == null) return false;
            FormsAuthentication.SetAuthCookie(email, false); // this line
            SessionService.Delete(UserSessionKey);
            SessionService.Store(UserSessionKey, UserMapper.DbUserToUser(user));
            return SessionService.HasKey(UserSessionKey);
        }

每当我点击登录时,它都可以正常运行(它刷新页面,我看到不同的内容),但是如果我然后导航到另一个页面,我会再次被重定向到登录页面。我(不)做错了什么?

如果您需要更多代码,我们很乐意发布。

1 个答案:

答案 0 :(得分:13)

当您说您正在使用MVC5时,您使用的是哪个版本的Visual Studio?您使用的是最初由默认向导创建的应用程序吗?

如果应用程序是由默认向导创建的,则默认情况下它会启用ASP.NET标识,并从处理中删除FormsAuthentication模块。如果要继续使用FormsAuth,则必须从Forms.uthentication模块的web.config中删除“remove”键。

您需要删除此行

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