Wim*_*ets 5 c# asp.net asp.net-mvc forms-authentication authorize-attribute
我试图在ASP.NET MVC中围绕Forms身份验证.MVC 5在我的具体情况下,如果重要的话.
我的应用程序不使用密码,只使用电子邮件地址作为用户名.
调试Login方法时,我可以清楚地看到模型有效,我的(自定义)MembershipProvider按预期验证用户.
然后它重定向到提供的returnUrl(为了测试的目的,我有一个AuthorizeAttributeon/Home/About).
可悲的是,我立刻被抛回到Login视野中,所以很明显我错过了整个过程的基本要素(并且,通过扩展,对整个身份验证/身份验证过程的基本洞察,我必须承认,因为我很少使用它).
Login方法:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if(ModelState.IsValid && Membership.ValidateUser(model.Email, ""))
{
FormsAuthentication.SetAuthCookie(model.Email, model.RememberMe);
if (Url.IsLocalUrl(returnUrl))
{
return RedirectToLocal(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "Email address unknown");
}
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
LoginViewModel:
public class LoginViewModel
{
[Required]
[Display(Name = "Email")]
[EmailAddress]
public string Email { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Web.config的相关部分:
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
</system.web>
Run Code Online (Sandbox Code Playgroud)
我没看到什么?我应该在哪里看?
您正在使用 FormsAuthentication 设置 cookie。如果您使用的是 MVC5,他们会使用该[Authorize]属性删除这种类型的身份验证。
在您的 web.config 中查找此内容。如果您想使用 FormsAuthentication,请删除该行。
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
</modules>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
您可能想阅读以下内容,了解 Microsoft 在 MVC5 中删除 FormsAuthentication 的原因以及如何改用 OWIN:http://blogs.msdn.com/b/webdev/archive/2013/07/03/understanding-owin-forms-authentication- in-mvc-5.aspx