Ich muss etwas ziemlich Einfaches tun: In meiner ASP.NET MVC-Anwendung möchte ich eine benutzerdefinierte IIdentity / IPrincipal festlegen. Was auch immer einfacher / geeigneter ist. Ich möchte die Standardeinstellung erweitern, damit ich so etwas wie User.Identity.Id
und aufrufen kann User.Identity.Role
. Nichts Besonderes, nur ein paar zusätzliche Eigenschaften.
Ich habe Unmengen von Artikeln und Fragen gelesen, aber ich habe das Gefühl, dass ich es schwieriger mache, als es tatsächlich ist. Ich dachte, es wäre einfach. Wenn sich ein Benutzer anmeldet, möchte ich eine benutzerdefinierte IIdentity festlegen. Also dachte ich, ich werde Application_PostAuthenticateRequest
in meiner global.asax implementieren. Dies wird jedoch bei jeder Anforderung aufgerufen, und ich möchte nicht bei jeder Anforderung einen Aufruf an die Datenbank senden, bei dem alle Daten aus der Datenbank angefordert und in ein benutzerdefiniertes IPrincipal-Objekt eingefügt werden. Das scheint auch sehr unnötig, langsam und am falschen Ort zu sein (Datenbankaufrufe dort ausführen), aber ich könnte mich irren. Oder woher sonst würden diese Daten kommen?
Daher dachte ich, wenn sich ein Benutzer anmeldet, kann ich meiner Sitzung einige erforderliche Variablen hinzufügen, die ich der benutzerdefinierten IIdentity im Application_PostAuthenticateRequest
Ereignishandler hinzufüge . Mein Context.Session
ist aber null
da, also ist das auch nicht der richtige Weg.
Ich arbeite jetzt seit einem Tag daran und ich habe das Gefühl, dass mir etwas fehlt. Das sollte nicht zu schwer sein, oder? Ich bin auch ein bisschen verwirrt von all den (halb) verwandten Dingen, die damit einhergehen. MembershipProvider
, MembershipUser
, RoleProvider
, ProfileProvider
, IPrincipal
, IIdentity
, FormsAuthentication
.... Bin ich die einzige, findet das alles sehr verwirrend?
Wenn mir jemand eine einfache, elegante und effiziente Lösung nennen könnte, um einige zusätzliche Daten auf einer IIdentity ohne all den zusätzlichen Flaum zu speichern, wäre das großartig! Ich weiß, dass es ähnliche Fragen zu SO gibt, aber wenn die Antwort, die ich brauche, da drin ist, muss ich sie übersehen haben.
MemberShip...
, Principal
, Identity
. ASP.NET sollte dies einfacher, einfacher und höchstens zwei Ansätze für den Umgang mit der Authentifizierung machen.