Ich versuche, mir die Formularauthentifizierung in ASP.NET MVC zu überlegen. MVC 5 in meinem speziellen Fall, falls das wichtig ist.AuthorizeAttribute leitet die Weiterleitung an/Account/Login weiter
Meine Anwendung verwendet keine Passwörter, nur eine E-Mail-Adresse als Benutzername.
Beim Debuggen der Login
Methode kann ich deutlich sehen, dass das Modell gültig ist und mein (benutzerdefinierter) MembershipProvider
validiert den Benutzer wie erwartet.
Es leitet dann auf die bereitgestellten returnUrl
um (zu Testzwecken habe ich eine AuthorizeAttribute
on/Home/About).
Leider werde ich sofort auf die Login
Ansicht zurückgeworfen, so ist es offensichtlich, dass ich ein grundlegendes Element für den gesamten Prozess fehlt (und durch Erweiterung, grundlegende Einsicht in den gesamten Auth/Auth-Prozess, muss ich zugeben, wie ich spiele selten damit herum).
Die Login-Methode:
[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);
}
Die LoginViewModel:
public class LoginViewModel
{
[Required]
[Display(Name = "Email")]
[EmailAddress]
public string Email { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
Der zugehörige Teil des Web.config:
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
</system.web>
Was bin ich nicht zu sehen? Wo soll ich hinschauen?
@ jbutler483 –
getan, was ich bin kein Experte (überhaupt), aber wenn durch den Code Schritt, wird der View-Modell gültig? Ansonsten würde ich das IsAuthorized anstelle eines Autorisierungsattributs verwenden. – jbutler483
@ jbutler483 Ja, wenn nicht, würde es keine Umleitung geben. –