HttpContext.Current.User! = HttpContext.User?

8

Ist HttpContext.Current.User in globalem asax nicht dasselbe wie HttpContext.User in einer Aktionsmethode? Ich habe dem Benutzer einige Rollen zugewiesen, aber sie scheinen verloren zu gehen.

Der folgende Code zeigt, was passiert. Beide Asserts werden bei der Anmeldung eines Benutzers zuerst in global asax und dann in der Aktionsmethode ausgelöst. Sie geben jedoch andere Ergebnisse.

Zuerst das:

%Vor%

Dann dies in meiner Aktionsmethode:

%Vor%

Ich habe die folgenden Ressourcen verwendet

Diese SO-Antwort

Ссылка

    
Dr Blowhard 22.05.2013, 13:26
quelle

1 Antwort

8

Ihre Frage-Tags sagen "aspnet-mvc (3 und 4)", also haben Sie die Möglichkeit, Folgendes zu verwenden, um Ihr Leben zu erleichtern? Wenn Sie Einfache Mitgliedschaft von der MVC 4 Internet Application Vorlage in VS2012 wird dies für Sie einfach out of the box funktionieren):

CreateUserAndAccount hat den Vorteil, dass auch Eigenschaften für das UserProfile einfach festgelegt werden können, zum Beispiel:

%Vor%

Bearbeiten , mir ist klar, dass das obige nicht Ihre ursprüngliche Frage zu .User -Eigenschaftsäquivalenz beantwortet.

HttpContext in einem Controller ist eine Eigenschaft: Controller.HttpContext . HttpContext in global.asax.cs ist die statische Klasse, deshalb verwenden Sie HttpContext.Current . Sie beziehen sich auf das Gleiche.

Wenn Sie den folgenden Code ausführen, können Sie sehen, dass sie scheinbar der "gleiche Prinzipal" sind. Die Frage ist also, was mit den Rollen passiert ist, die Sie zugewiesen haben?

%Vor%

Das Problem ist, dass Sie GenericPrincipal bis .User zugewiesen haben. Abhängig von RoleProvider kann dies überschrieben werden (z. B. durch RoleManagerModule ) während PostAuthenticateRequest und (zum Beispiel) in RolePrincipal umgewandelt werden. Dies kann dann zurück in die Datenbank verschoben werden (wiederum abhängig vom Anbieter), um die Rollen zu erhalten, also Ihre Rollen überschreiben. Wenn Sie die Arbeit in Application_OnPostAuthenticateRequest erledigen, könnten Sie in Ordnung sein.

    
Andy Brown 22.05.2013, 13:58
quelle