2009-07-26 12 views
1

Ich bin die Erweiterung der asp.net MVC-Beispiel .. Ich benutze asp.net Mitgliedschaft Provider, der damit kommt. .ASP.NET MVC Mitgliedschaft scheint nicht zu funktionieren, wenn Benutzer direkte URL kennen

Das Problem ist, dass, wenn ich direkt auf eine meiner URLs ohne Anmeldung zugreifen, zeigt die vollständige Seite mit "Anmelden" -Link an der Spitze.

ich es offensichtlich wollen die Login-Seite umleiten, wenn jemand eine der spezifischen Aktion Urls zugreift und sie sind nicht angemeldet.

brauch ich spezifische Logik in jeder Handlung eines jeden Controller setzen um zu überprüfen für "ist angemeldet?" \

Alle Best Practices hier.

Antwort

8

Sie müssen Ihre Controller-Aktionen mit "[Authorize]" dekorieren und die richtige Anmeldeseite in der Web-Konfiguration einrichten. Wenn also eine Aktion aufgerufen wird, prüft sie, ob der Benutzer angemeldet ist und weiterleitet die richtige Login-Seite, wenn nicht.

EDIT: Hier ist ein Beispiel dafür, wie es zu konfigurieren:

in der web.config ... hinzu:

<authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn.aspx" timeout="30"/> 
    </authentication> 

Dies wird die Seite angeben, wo nicht authentifizierte Benutzer werden, wenn sie umgeleitet werden trifft einen Controller dekoriert mit [autorisieren()]

in Ihrem Controller (das auf der Handlungsebene oder auf Controller-Ebene sein kann, ist hier auf der Handlungsebene gezeigt)

public class HistoryController : Controller 
{ 
... 
[Authorize] 
public ActionResult MyActionThatNeedAuthentication() 
{ 
    ... 
} 
... 

} 
+0

Sie die Dekoration an der Spitze der Klasse platzieren können auch so, dass Sie kann einen gesamten Controller auf einmal sperren. – griegs

+0

können Sie mir hier ein Beispiel geben .. Wenn ich [Authorize] habe, wo geht der Code hin, wenn der Benutzer nicht autorisiert ist? – leora

+0

Wenn der Benutzer nicht berechtigt ist, werden die Benutzer nach ~/Account/LogOn.aspx weitergeleitet. Wenn sie sich erfolgreich anmelden, werden sie auf die ursprünglich angeforderte Seite zurückgesetzt. – ctford

0

Sie können auch die autorisierten Benutzer oder Rollen in dem Attribut definieren als Komma Listen

[Authorize(Users = "User1,User2")] 
public ActionResult ActionName() 
{ 
return View(); 
} 
getrennt

oder

[Authorize(Roles = "Role1,Role2")] 
public ActionResult ActionName() 
{ 
return View(); 
}