Wie kann ich die ASP.Net MVC Login Redirect basierend auf der Rolle ändern?

7

Ich habe den folgenden Code, den ich in meinem MVC-Projekt in den Account Controller eingegeben habe, und ich bin sowohl in der Administrator- als auch in der Managerrolle. Wenn ich mich anmelde, werde ich zurück zu meinem Heim-Index weitergeleitet, anstatt zu meinem AdminApp-Index umgeleitet zu werden. Irgendwelche Ideen, wo ich in meinem Code falsch liege?

%Vor%     
Ben 08.12.2009, 09:54
quelle

3 Antworten

19

Der Grund, warum Ihr Code nicht wie erwartet funktioniert, liegt daran, dass User technisch nicht angemeldet und authentifiziert wurde. Sag was? Aber du hast SignIn angerufen!

FormsAuth.SignIn(userName, rememberMe); - was in diesem Fall nur ein Wrapper für FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); ist - setzt nur den asp.net-Berechtigungscookie im Browser des Benutzers als Teil der Antwort. Nur für Anfragen nach diesem Punkt wird der Browser des Benutzers den Cookie haben, wodurch die asp.net-Mitgliedschaft das 'Benutzer' -Objekt richtig eingerichtet. Der gesamte Code in der LogOn-Methode geht weiterhin von einem anonymen Benutzer aus, sodass Ihre IsInRole-Prüfung fehlschlägt und Sie nach Hause weitergeleitet werden. Setzen Sie Ihre if-Anweisung auf eine andere Seite und nachdem Sie angemeldet sind, sehen Sie, dass User.IsInRole nun wie erwartet funktioniert. (Und genau dafür würden Sie User.IsInRole verwenden, nur nicht während des Anmeldevorgangs)

So, wie man während des tatsächlichen Anmeldeprozesses überprüft? Roles.IsUserInRole oder Roles.GetRolesForUser sind ein paar Wege, zB:

%Vor%

Sie müssen den Benutzernamen des Benutzers, der sich anmeldet, explizit angeben. Dadurch wird eine Abfrage für den Mitgliedschaftsdatenspeicher ausgeführt. In diesem Sinne glaube ich, dass der obige Code dazu führen würde, dass zwei Abfragen ausgeführt werden, die Sie möglicherweise als nicht ideal empfinden. Dies ist, wo Roles.GetRolesForUser eine bessere Option sein könnte:

%Vor%

Hoffe das hilft!

    
Kurt Schindler 10.12.2009, 16:54
quelle
2

Ich benutze VS 2013 und es ist ein neues Identity-Modell, mit dem ich am Ende gegangen bin:

%Vor%     
Michael Tranchida 06.10.2014 22:50
quelle
0

Sie müssen die if-Anweisung aufheben. Überarbeiten Sie wie folgt:

Ändern Sie dies:

%Vor%

dazu:

%Vor%

Das Problem ist, dass die Zeile if(!String.IsNullOrEmpty(returnUrl))) auf True auswertet, weil der Parameter returnUrl standardmäßig die URL der Seite hat, von der Sie gekommen sind.

    
Jeff French 08.12.2009 16:59
quelle