2013-11-22 12 views
6

Ich arbeite an einer ‚ASP.NET MVC 4‘ Anwendung und Nutzung anmelden, um zu sehen ‚SimpleMembershipProvider‘. Die Anwendung wird im Intranet verwendet, und für nicht autorisierte Benutzer wird kein Inhalt verfügbar sein. Daher möchte ich die Anmeldung erzwingen, bevor ich den Benutzer auf den eigentlichen Website-Inhalt überlasse., wie der Benutzer zwingen, Inhalte mithilfe von ASP.NET MVC 4

Ich denke, das sollte eher triviale Aufgabe sein, aber es ist das erste Mal, dass ich solche Logik implementieren muss und ich es auch tun möchte MVC 4/SimpleMemebrship Stil, so dass ich Rat suche.

Die Art und Weise finde ich es umgesetzt werden soll, ist zunächst diese in dem web.config hinzufügen:

<authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="15" slidingExpiration="true" enableCrossAppRedirects="false" protection="All" /> 
    </authentication> 

schließlich werde ich nicht Aktion, die anonym erlauben wird, so denke ich, es ist besser, dies zu setzen Hier.

Und die Änderung meiner Standard-Route:

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional } 
      ); 

Welche, wie ich es sehe, wird die einzige Aktion, die anonym ermöglichen. Allerdings bin ich ein wenig besorgt über die Änderung der Standardroute zu Login Ich bin mir nicht sicher, ob dies nicht zu unerwarteten Nachteilen führen wird.

Ich habe auch die Idee, die Standardstruktur von den MVC 4 Internet Template erstellt zu halten und lassen nur die Index Wirkung der Home Controller der Verantwortung, aber ich weiß nicht, wie dieses Szenario, weil die Logik ist klar - der Benutzer muss angemeldet sein um Zugang zu bekommen und sogar ist ein Zugang in meinen Gedanken.

Also, was ist der Weg, um ein solches Verhalten zu implementieren? Was sind die grundlegenden Schritte, Änderungen, die ich machen sollte, um dieses Recht umzusetzen?

Antwort

19

Sie können dies durch die Registrierung Authorize Attribut als globale Filter erreichen. Bellow ist ein Beispiel dafür, wie Sie Ihre RegisterGlobalFilters Methode soll wie folgt aussehen:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new AuthorizeAttribute()); 
} 

mit diesem an Ort und Stelle, werden Sie anonyme Benutzer erlauben, müssen die Login-Seite zuzugreifen. Dazu notieren Sie Ihre Login-Aktionsmethode mit dem Attribut AllowAnonymous.

[AllowAnonymous] 
[HttpGet] 
public ActionResult Login() 
{ 
... 
} 

Machen Sie dasselbe für die Anmeldeaktionsmethode, die die POST-Anforderung empfängt.