Ich bin mit der Implementierung von Rollen in ASP.NET MVC 5 etwas in der Klemme. Ich versuche mich als Benutzer anzumelden, der keine Rolle benötigt, um auf den Bereich der Anwendung zuzugreifen, die ich versuche erreichen. Was ich in diesem Szenario erwarten würde, ist, dass ich erneut zur Anmeldeseite weitergeleitet werde, und zwar solange, bis ich einen Berechtigungssatz eingegeben habe, der Zugriff hat, oder ich navigiere zu einem anderen Bereich der Anwendung.
Was tatsächlich passiert, ist, dass die Anwendung in eine Login-Redirect-Schleife zu gehen scheint. Das Debugging zeigt, dass die Login-Aktion mehrmals aufgerufen wird.
Hier ist die Login-Aktion:
%Vor%Dies führt zu einem von IIS generierten Fehler:
%Vor%Die Abfragezeichenfolge sieht folgendermaßen aus:
%Vor%Die einzige Änderung, die ich von einer funktionierenden Lösung (wenn auch ohne rollenbasierte Autorisierung) zu meiner derzeitigen, kaputten Situation gemacht habe, ist das Hinzufügen des folgenden über den Controller, zu dem ich bei einer erfolgreichen Anmeldung weitergeleitet werde:
%Vor%Wie bereits erwähnt, ist der Benutzer, in dem ich mich anmelde, nicht in dieser Rolle, aber ich würde eine vernünftige, einfache Weiterleitung zur Anmeldung ohne die Schleife erwarten.
Bearbeiten: angefordert bu @dima, die Details der Genehmigung durch Filter angewendet ... Ich habe folgendes:
%Vor%Allerdings habe ich die Anwendung mit und ohne diese Leitung getestet und die Weiterleitungsschleife wird unvermindert fortgesetzt.
Während diese Frage alt ist, hatte ich das gleiche Problem und habe eine Lösung gefunden.
Ursprünglich hatte ich den gleichen AuthorizationAttribute-Filter hinzugefügt und befand mich in derselben Schleife. Ich nahm es dann weg und begann, das authorize-Attribut zu einzelnen Controllern hinzuzufügen, und stellte fest, dass die Endlosschleife nur passierte, wenn ich das authorize-Attribut meinem Heim-Controller hinzufügte. Es stellt sich heraus, dass mein HomeController
nach my AccountController
heißt.
In meinem _Layout.cshtml
habe ich folgendes aufgerufen:
Die Layout-Seite würde den Körper korrekt darstellen, aber wenn es dazu kam, traf es eine Controller-Methode, die ein Autorisierungsattribut hatte. Dies führte zur Umleitung auf Account/Login
.
Das Hinzufügen des Attributs AllowAnonymous
zur Aktion LeftNav
hat das Problem behoben.
Stellen Sie sicher, dass Ihre Login
-Ansicht und -Layouts keine Aktionen mit einem authorize-Attribut aufrufen.
Seitdem ich dies entdeckt habe, habe ich ein benutzerdefiniertes Layout für meine nicht autorisierten Anfragen erstellt, um weitere potentielle Probleme wie diese zu vermeiden.
Ich habe an dem gleichen Beispiel gearbeitet, das in der Frage gegeben wurde, aber die Antwort (markiert) von @silencedmessage konnte meine Situation nicht lösen, obwohl ich alle Verbindungen zwischen dem Home
Controller und Account
Controller und zwischen% getrennt habe co_de% controller und Account
view. Wenn jemand mit dieser Situation konfrontiert wird, empfehle ich, der Lösung den folgenden Schritt hinzuzufügen:
Da das _layout
in diesem Beispiel global angewendet wird, sind alle seine Aktionsmethoden standardmäßig gesichert und erlauben keinen 'anonymen' Zugriff. In diesem Beispiel wird das AuthorizeAttribute
-Attribut nur auf [AllowAnnonymous]
login Aktionsmethode angewendet. Es wird nicht auf [HttpPost] login ActionMethod angewendet und da [HttpGet]
global angewendet wird, sichert es AuthorizeAttribute
login ActionMethod, daher [HttpPost]
login ActionMethod wird nicht ausgeführt und Sie werden zu [HttpPost]
login umgeleitet ActionMethod unendlich.
Durch das einfache Hinzufügen von [HttpGet]
zu [AllowAnnonymous]
login ActionMethod hat meine Situation gelöst.
Ich hoffe, es hilft.
Tags und Links asp.net-mvc asp.net-identity asp.net-roles authorize-attribute