我的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的相对新手,但是我有一个同事在看这个代码时获得了不错的经验,他也找不到任何东西。谢谢你的帮助。
答案 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>
希望这有帮助。