2013-07-10 8 views
5

Ich habe eine Aktion namens ForgetPassword. Jedes Mal, wenn ein Anonymer versucht, die Aktion abzurufen, wird er auf die Anmeldeseite umgeleitet. Unten sind meine Implementierungen.Erlaube Anonymous, bestimmte Aktion in asp.net mvc 3

public ActionResult ForgotPassword(string UserName) 
{ 
    //More over when i place a breakpoint for the below line 
    //its not even getting here 
    return View("Login"); 
} 

Und hier ist ein Teil meiner Datei web.config

<location path=""> 
     <system.web> 
      <authorization> 
      <deny users="?"/> 
      </authorization> 
     </system.web>  
     </location> 

    <location path="Content"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web>  
    </location> 

    <location path="Scripts"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web>  
    </location> 

    <location path="Images"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web>  
    </location> 

<authentication mode="Forms"> 
    <forms loginUrl="/Home/Login" timeout="5" slidingExpiration="false" /> 
</authentication> 
+0

Haben Sie Ihre 'Controller/Action' mit' Authorize' Attribut versehen oder einen globalen 'Authorize' Filter registriert? – haim770

Antwort

8

Wie Sie alle von der Anwendung durch Verwendung verweigern.

<authorization> 
    <deny users="?"/> 
</authorization> 

IMHO, sollten Sie nicht web.config verwenden, um die Authentifizierung Ihrer Anwendung zu steuern, anstatt Authorize Attribut verwenden.

Fügen Sie diese in Ihrem Global.asax Datei unter RegisterGlobalFilters Methode

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

oder Sie können mit [Authorize]

[Authorize] 
public class HomeController : Controller 
{ 
    ... 
} 

auch Ihre Controller dekorieren Wenn Sie ASP.NET MVC4 verwenden, für Maßnahmen, die Anonymous erfordern Zugriff verwenden AllowAnonymous Attribut

[AllowAnonymous] 
public ActionResult ForgotPassword() { 
    //More over when i place a breakpoint for the below line 
    //its not even getting here 
    return View("Login");; 
} 

Gemäß Reference können Sie zum Sichern Ihrer MVC-Anwendung keine Routing- oder web.config-Dateien verwenden. Die einzige unterstützte Methode zum Sichern Ihrer MVC-Anwendung besteht darin, das Autorize-Attribut auf jeden Controller anzuwenden und das neue AllowAnonymous-Attribut für die Anmelde- und Registrierungsaktionen zu verwenden. Das Treffen von Sicherheitsentscheidungen basierend auf dem aktuellen Bereich ist eine sehr schlechte Sache und öffnet Ihre Anwendung für Sicherheitslücken.

+4

funktioniert AllowAnonymous in MVC 3? Ich denke nicht. So fragte der Postbesitzer. – user20358

0

Wenn Sie ASP.NET MVC4 verwenden versuchen Sie können AllowAnonymous Attribut auf die Aktion wie folgt zu setzen:

[AllowAnonymous] 
public ActionResult ForgotPassword(string UserName) 
{ 
    //More over when i place a breakpoint for the below line 
    //its not even getting here 
    return View("Login"); 
} 

weitere Informationen finden Sie aktuelle Jon Galloway Artikel: Global authentication and Allow Anonymous

1

Ich nehme an, dass Sie auf Ihrem Controller ein "Autorisieren" -Attribut setzen, das die Anmeldung für jede Controller-Aktion erzwingt. Ich empfehle, dieses Attribut aus dem Controller zu entfernen und es für jede Aktion einzeln festzulegen. oder aktualisieren Sie auf MVC 4 und verwenden Sie das AllowAnonymous-Attribut.

2

Von Link: http://weblogs.asp.net/jongalloway/asp-net-mvc-authentication-global-authentication-and-allow-anonymous

Wenn Sie 3 MVC verwenden können Sie nicht tun:

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

Warum es global ist und AllowAnonymous Attribut funktioniert nicht auf MVC 3.

Sie müssen also Ihren eigenen Filter erstellen. Es funktioniert für mich (MVC 3), Sie können die komplette Lösung here überprüfen.