Wo speicher ich zusätzliche Benutzerdetails mit ASP.NET MVC und dem SqlMembershipProvider?

8

Ich erstelle also eine ASP.NET MVC-Website.

Es hat eine ziemlich komplexe Benutzer-Anmeldeseite mit vielen Feldern. Meine Frage ist, wo soll ich das bestehen? Die Benutzertabellen, die vom Mitgliedschaftsanbieter-Tool erstellt wurden, enthalten diese Spalten nicht und ich bin verwirrt darüber, was die Best Practice in Bezug auf das Speichern dieser zusätzlichen Informationen über jeden Benutzer ist?

Kommt hier ein Profilanbieter ins Spiel? Wie arbeiten Sie? Wenn nicht, wie sonst bleiben Sie erhalten und speichern die zusätzlichen Benutzerdetails, die nicht in den Bestandsspalten der MembershipProvider-Tabellen enthalten sind?

Kann mir jemand auf einige Ressourcen hinweisen, wie man damit umgeht, wie man auf diese zusätzlichen Benutzerdetails zugreift, wenn ich sie brauche, wie man einen neuen Benutzer mit all diesen Informationen usw. erstellt.

    
KingNestor 16.07.2009, 19:36
quelle

4 Antworten

3

Hier kommt der ASP.NET-Profilanbieter ins Spiel. Sie können damit beliebige Profilinformationen zu einem Benutzer speichern. Sie müssen lediglich die benötigten Felder in der Datei web.config MSDN Link hinzufügen, um zu konfigurieren die Profilfelder in der Datei web.config . Um den Artikel zusammenzufassen, fügen Sie einfach den Namen und die Typwerte hinzu, die Sie speichern möchten, in den Knoten Eigenschaften des Profilelements. Hier ist ein Beispiel:

%Vor%

In ASP.NET-Webforms erstellt Visual Studio automatisch eine stark typisierte Profilklasse, die auf Ihre benutzerdefinierten Profileigenschaften verweist. In MVC passiert das nicht. Um auf die Profilinformationen eines Benutzers zu verweisen, rufen Sie einfach HttpContext.Profile ["PropertyName"] auf. Ein Beispiel:

%Vor%

Bearbeiten: Wie Andy bemerkte, ist die Verwendung des Standard-SqlProfileProvider nicht wirklich gut, wenn Sie Abfragen für diese Eigenschaften ausführen möchten. Er hat vollkommen recht, und vielleicht hätte ich diese Beschränkung ursprünglich bemerken sollen. Diese Einschränkung besteht, da SqlProfileProvider alle Profildaten in drei Spalten speichert: PropertyNames und PropertyValuesString / PropertyValuesBinary. Alle Schlüssel werden im Feld "PropertyNames" gespeichert, Werte, die als Zeichenfolge gespeichert werden können, werden im Feld "PropertyValuesString" usw. gespeichert. Dies bedeutet, dass es extrem schwierig ist, eine Abfrage wie "Select * from aspnet_Profile Age & gt; 10" auszuführen.

    
Ryan Hoffman 16.07.2009 21:27
quelle
3

Ich bin mir nicht wirklich sicher, ob es eine Best Practice gibt und es hängt wirklich davon ab, wie Sie die Informationen verwenden wollen.

Zuerst müssen Sie die Mitgliedschaft erkennen und Profile sind zwei verschiedene Dinge. Die ASP.NET-Funktion für Mitgliedschaft, Profil und Rolle wurde als Dienst für mehrere Websites / Anwendungen konzipiert.

Wenn Sie sich das Schema für diese Beziehungen ansehen, werden Sie feststellen, dass Benutzer für das System eindeutig sind, ein Benutzer jedoch für verschiedene Anwendungen freigegeben werden kann. Das bedeutet, dass ihre Profilinformationen auch über die Anwendungen verteilt werden. Mitgliedschaft ist eigentlich die Verbindung eines Benutzers mit einer Anwendung und enthält Informationen über ihre Beziehung zu dieser bestimmten Anwendung (Passwort, Passwort Q & amp; A, etc).

Sie können den Profilanbieter wie von Ryan vorgeschlagen verwenden, aber 1) dass Informationen nicht leicht abgefragt werden können, wenn Sie Profilmetriken sammeln möchten und 2) sie für alle Nutzer der Mitgliedschafts- / Profildienste geteilt werden. Sie können es jedoch erweitern, um Ihre Anforderungen zu erfüllen.

Sie können den Mitgliedschaftsanbieter wie von Gortok vorgeschlagen erweitern und Informationen relativ zur Anwendung bereitstellen, aber Sie müssen sicherstellen, dass Sie vorhandene Benutzer des Dienstes nicht durch Ändern der vorhandenen gespeicherten Prozeduren oder Tabellen in einer sich ändernden Weise auflösen ihre Schnittstelle oder Absicht.

Die andere Option ist, dass Sie sie als Dienst behandeln und diese Informationen selbst verfolgen können, indem Sie in Ihre eigene Profilimplementierung mit der Benutzer-ID vom asp.net sql-Provider verweisen.

Es gibt eine gute Serie (16 Teile) auf Mitgliedschaft, Profilen und Rollen bei 4 Jungs von Rolla, die ich empfehlen würde, zu lesen, und dann, wenn du mit allen beweglichen Teilen vertraut bist, eine fundierte Entscheidung darüber treffen, wo du am besten speichern kannst und wie du die Profilinformationen, die du erstellen möchtest, am besten strukturierst.

    
andymeadows 16.07.2009 22:17
quelle
2

Ich weiß, dass dieser Beitrag seit langer Zeit veröffentlicht wurde, und der Fragekontext war wahrscheinlich für mvc2 oder früher.

Es ist jetzt mvc3, und ich dachte, dass vielleicht andere, die Antworten für den mvc5-Kontext suchen, an dieser Lösung interessiert sein könnten.

In einem Standard-mvc5-Projekt, für das ein einzelnes Benutzerkonto aktiviert ist Sie finden den folgenden Codeblock zur Verwendung in {Project} /Models/IdentityModel.cs

bereit %Vor%

Fügen Sie dieser Klasse einfach weitere Eigenschaften hinzu, und die Eigenschaften bleiben in der Datenbank erhalten Z.B.

%Vor%     
Ji_in_coding 17.04.2015 20:00
quelle
1

Dieser Artikel von CODE Magazine hat mir bei diesem Problem geholfen.

    
George Stocker 16.07.2009 20:03
quelle