Aktuelle Benutzerrolle aktualisieren, wenn sie im ASP.NET-Identitätsframework geändert wurde?

8

Verwenden von VS 2013, der Standard-MVC-Vorlage und des Identity-Provider-Frameworks

Der Benutzer ist angemeldet und ich habe:

%Vor%

Und der Controller der Mitglieder ist wie folgt:

%Vor%

Nachdem Zeile X ausgeführt wurde, kann ich bestätigen, dass der Benutzer zur Tabelle dbo.AspNetUserRoles hinzugefügt wurde. Der Benutzer beim Erreichen des Mitglieder-Controllers schlägt jedoch die Rollenprüfung fehl. User.IsInRole("Members") gibt false zurück.

Wenn sich der Benutzer abmeldet und sich erneut anmeldet, wird der Zugriff auf den Members-Controller durchgeführt, dh User.IsInRole("Members") gibt jetzt true zurück.

Gibt es Caching? Warum die Verzögerung? Wie überwinde ich es?

Ich habe auch versucht, die Methode in Line X in eine asynchrone Methode umzuwandeln und UserManager.AddToRoleAsync verwendet. Derselbe verzögerte Effekt ist immer noch da.

    
Old Geezer 26.03.2015, 17:47
quelle

1 Antwort

16

Die Identitätsinformationen (Rollen, Claims) werden beim Anmelden in den Cookie eingefügt. Da der Benutzer bereits angemeldet ist, aktualisiert diese Codezeile UserManager.AddToRole(User.Identity.GetUserId(), "Members") die db, nicht jedoch den Cookie. Sie müssen den Cookie erneut ausgeben.

Versuchen Sie, SignInManager.SignIn(user, false, false); hinzuzufügen (wenn Sie keinen Benutzer haben, var user = UserManager.FindById(User.Identity.GetUserId()) ) vor RedirectToAction("Index", "Members");

    
tmg 26.03.2015, 18:38
quelle