5

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?

+0

@ jbutler483 –

+0

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

+0

@ jbutler483 Ja, wenn nicht, würde es keine Umleitung geben. –

Antwort

4

Sie legen Ihr Cookie mit FormsAuthentication fest. Wenn Sie MVC5 verwenden, wurde diese Art der Authentifizierung mit dem Attribut [Authorize] entfernt.

Suchen Sie in Ihrer web.config. Entfernen Sie diese Zeile, wenn Sie FormsAuthentication verwenden möchten.

<system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" /> 
    </modules> 
    </system.webServer> 

Sie diese vielleicht lesen, warum Microsoft entfernt FormsAuthentication in MVC5 und wie OWIN zu verwenden, anstatt: http://blogs.msdn.com/b/webdev/archive/2013/07/03/understanding-owin-forms-authentication-in-mvc-5.aspx

+0

Wunderbar! Vielen Dank! –

0

Dieses Verhalten wird durch eine falsche Einstellung des IIS Express verursacht werden können.

Überprüfen Sie die IISExpress Einstellungen. Entweder indem Sie F4 für das Projekt drücken oder indem Sie die Projektdatei *.csproj bearbeiten.

  1. Set Eigenschaft Anonymous Authentication zu Enabled;
  2. Eigenschaft Windows Authentication auf Disabled setzen.

oder zu bearbeiten Konfiguration:

<PropertyGroup> 
    <IISExpressAnonymousAuthentication /> 
    <IISExpressWindowsAuthentication /> 
Verwandte Themen