Wie kann ich das ändern ASP.Net MVC Login Redirect basierend auf der Rolle?
Ich habe den folgenden code habe ich schon eingegeben in der Konto-Controller in meinem MVC-Projekt und ich bin in der administrator-und manager-Rollen. Wenn ich mich einlogge bekomme ich umgeleitet zurück zu meinem home-index anstelle der Weiterleitung zu meinem AdminApp index. Irgendwelche Ideen, wo ich bin going falsch in meinem code?
[AcceptVerbs(HttpVerbs.Post)]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings",
Justification = "Needs to take same parameter type as Controller.Redirect()")]
public ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl)
{
if (!ValidateLogOn(userName, password))
{
return View();
}
FormsAuth.SignIn(userName, rememberMe);
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
if (User.IsInRole("Administrator") || (User.IsInRole("Manager")))
{
return RedirectToAction("Index", "AdminApp");
}
else
{
return RedirectToAction("Index", "Home");
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund, warum Ihr code nicht so funktioniert wie es erwartet wird, weil die
User
hat technisch nicht schon angemeldet hat und authentifiziert noch. Sagen Sie, was? Aber Sie haben Sie rufen Sie An!FormsAuth.SignIn(userName, rememberMe);
- in diesem Fall ist nur ein wrapper fürFormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
- stellt nur die asp.net authorization cookie auf dem browser des Benutzers als Teil der Antwort. Es ist nur für Anfragen nach dieser Stelle, dass der browser des Benutzers wird der cookie, der das verursacht asp.net Mitgliedschaft, um richtig einrichten der 'User' - Objekt. All Ihr code in der LogOn-Methode ist noch vorausgesetzt, ein anonymer Benutzer, also Ihre "IsInRole" - check schlägt fehl, und Sie werden umgeleitet zu Hause. Setzen Sie Ihre if-Anweisung auf einer anderen Seite und nachdem Sie sich angemeldet haben, werden Sie sehen, dass jetztUser.IsInRole
funktioniert wie erwartet. (Und in der Tat, das ist, was Sie verwenden würden, Benutzer."IsInRole" - für möglich, nur nicht während des Anmeldevorgangs)So, wie Sie überprüfen, während der eigentliche Anmeldevorgang?
Roles.IsUserInRole
oderRoles.GetRolesForUser
sind ein paar Möglichkeiten, zB.:Müssen Sie explizit angeben, den Benutzernamen der Benutzer anmelden, die auch tatsächlich ausführen einer Abfrage für die Mitgliedschaft datastore. In diesem Sinne, glaube ich, würde der obige code als Ergebnis dazu führen, dass zwei Abfragen ausgeführt werden, die Sie möglicherweise weniger als ideal. Dies ist, wo die Rollen.GetRolesForUser eine bessere option sein könnte:
Hoffe, das hilft!
Bin ich mit VS 2013 und es ist eine neue Identität Modell, ich landete mit diesem:
Müssen Sie un-verschachteln der wenn-Anweisung. Überarbeiten Sie wie folgt vor:
Ändern:
zu diesem:
Das problem ist das die Linie
if(!String.IsNullOrEmpty(returnUrl)))
ist die Evaluierung Wahr, weil die returnUrl-parameter an die url der Seite, von der Sie kamen standardmäßig.