我对.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);
}
每当我点击登录时,它都可以正常运行(它刷新页面,我看到不同的内容),但是如果我然后导航到另一个页面,我会再次被重定向到登录页面。我(不)做错了什么?
如果您需要更多代码,我们很乐意发布。
答案 0 :(得分:13)
当您说您正在使用MVC5时,您使用的是哪个版本的Visual Studio?您使用的是最初由默认向导创建的应用程序吗?
如果应用程序是由默认向导创建的,则默认情况下它会启用ASP.NET标识,并从处理中删除FormsAuthentication模块。如果要继续使用FormsAuth,则必须从Forms.uthentication模块的web.config中删除“remove”键。
您需要删除此行
<system.webServer>
<modules>
<remove name="FormsAuthentication" /> <----****
</modules>
</system.webServer>