AuthorizeAttribute продолжает перенаправление на /Account / Login
Я пытаюсь обернуть свою голову вокруг проверки подлинности форм в ASP.NET MVC. MVC 5 в моем конкретном случае, если это имеет значение.
Мое приложение не использует пароли, только адрес электронной почты в качестве имени пользователя.
При отладке метода Login
я ясно вижу, что модель допустима, и мой (пользовательский) MembershipProvider
проверяет пользователя, как и ожидалось.
Затем он перенаправляется на предоставленный returnUrl
(для целей тестирования у меня есть AuthorizeAttribute
on /Home/About).
К сожалению, меня отбрасывает назад в Login
просмотр сразу же, так что очевидно, что я упускаю фундаментальный элемент всего процесса (и, как следствие, фундаментальное понимание всего процесса auth/auth, я должен признать, поскольку я редко играю с ним).
Метод входа в систему:
[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);
}
Модель LoginViewModel:
public class LoginViewModel
{
[Required]
[Display(Name = "Email")]
[EmailAddress]
public string Email { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
Соответствующая часть сети.конфигурация:
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
</system.web>
Чего я не вижу? Куда же мне смотреть?
2 ответа:
Вы устанавливаете свой файл cookie с помощью FormsAuthentication. Если вы используете MVC5, они удалили этот тип аутентификации с атрибутом
[Authorize]
.Поищите это в своей сети.конфиг. Удалите эту строку, если вы хотите использовать FormsAuthentication.
<system.webServer> <modules> <remove name="FormsAuthentication" /> </modules> </system.webServer>
Возможно, вы захотите прочитать это о том, почему Microsoft удалила FormsAuthentication в MVC5 и как использовать OWIN вместо этого: http://blogs.msdn.com/b/webdev/archive/2013/07/03/understanding-owin-forms-authentication-in-mvc-5.aspx
Такое поведение может быть вызвано неправильной настройкой IIS Express.
Проверьте настройки
IISExpress
. Либо нажавF4
на проект, либо отредактировав файл проекта*.csproj
.
- установить свойство
Anonymous Authentication
вEnabled
;- задайте свойству
Windows Authentication
значениеDisabled
.Или измените конфигурацию на:
<PropertyGroup> <IISExpressAnonymousAuthentication /> <IISExpressWindowsAuthentication />