Frage


A) Warum bei der Verwendung von Vorlagen mit Create Kontrolle, nicht einschließlich Textbox mit ID = E-Mail hängt davon ab, ob Create. RequireEmail Eigenschaft auf true gesetzt ist, aber TextBox mit ID = Frage ist nur erforderlich, wenn darunter liegende Mitgliedschaftsanbieter Passwort Frage erfordert? Mit anderen Worten, warum wäre es, ob nicht auch bis zu Grunde liegenden Mitgliedschaftsanbieter zu entscheiden, Textbox ( mit ID = E-Mail ) erforderlich ist?


B) Auf der anderen Seite, warum bis zu Mitgliedschaftsanbieter wäre, ob Passwort entscheiden Frage erforderlich ist? Sollte dies nicht bis zu seine Membership-Klasse zu entscheiden? Doch auch sonst ist die Aufgabe der Mitgliedschaft Anbieters sollte nur Zugriff auf die zugrunde liegende Datenspeicher zur Verfügung zu stellen, und nicht, um zu entscheiden, welche Daten Benutzer bereitstellen muss?!


Danke


EDIT:

A)

  

Es kommt auf die Tatsache, dass der Mitgliedschaftsanbieter eine offensichtliche Zuordnung hat. RequiresQuestionAndAnswer, die Sie festlegen können, und haben dies durchgesetzt werden, aber Sie können nicht angeben, dass der Benutzer eine E-Mail-Adresse angeben muß

So RequiresUniqueEmail im Wesentlichen besagt, dass Benutzer keine E-Mail-Adresse angeben muss, aber wenn sie es tut, muss sie eindeutig sein?


B)

  • Wenn ich die Mitgliedschaft Anbieter richtig zu verstehen, sie sind die Einheiten, die SQL-Abfragen zur Datenspeicherung senden ?! So nehme ich sie Kenntnis von Tabellen und Beziehungen haben usw. Diese Datenspeicherung hat?

  • Aber noch, was passiert, wenn die Datenspeicherung keine Spalte hat E-Mail-Adressen für die Speicherung, sondern AngelegtVon () gibt an E-Mail-Adresse als einen seiner Parameter? Wie geht die Mitgliedschaft Anbieter das?

War es hilfreich?

Lösung

Es ist ein interessanter Punkt, dass E-Mail einen Teil der erwarteten Datenfelder ist.

Lassen Sie mich klarstellen ... wenn Sie RequiresUniqueEmail auf true für den SQL-Provider gesetzt ist, wird die E-Mail nicht --strictly Sprechen erforderlich. Es bedeutet nur, dass jeder Benutzer eine andere E-Mail-Adresse von jedem anderen Benutzer verwenden muß. So kann es ein Nutzer ohne E-Mail-Adresse sein. Ein Nullwert wird in der Datenbank eingestellt werden. Aber kein anderer Benutzer der Lage wäre, die E-Mail-Adresse danach weglassen, denn das würde zwei Benutzer verursacht null E-Mails haben ... So funktional kann es auch sein, die gleiche wie erforderlich E-Mail-Adressen, aber es ist technisch nicht gleich.

Der Assistent Steuerelemente bietet eine Standard-Benutzeroberfläche für die Mitgliedschaft Informationen zu sammeln, und es wird davon ausgegangen werden Sie verwenden, um die Standard-SQL-Provider. Wenn Sie nicht den Standardanbieter verwenden, Ihr Provider nicht all Felder unterstützt, oder Sie haben andere Einschränkungen in Ihrem Provider, dann sollten Sie die Schritte des Assistenten mit Ihren eigenen Vorlagen anpassen und der Assistenten Ereignis behandeln Ihre eigenen Validierungen zur Verfügung zu stellen und zusätzliche Logik als angemessen.

Wie für das Verständnis des Membership-Systems selbst ...

Das Membership-System in asp.net ist ein Kompromiss zwischen streng OO-Design und Komfort. Es gibt ein paar Annahmen in der Basis MembershipProvider Klasse, von der die spezifischen Membership Provider erbt, die anmaßend sind. Die Tatsache, dass E-Mail-Adressen werden ein Teil der Mitgliedsdaten in einen der liberaleren Annahmen die Basis Anbieter macht sein.

diese Annahme Indem aber, die in den meisten Umgebungen ist wahr, das Mitgliedschafts-System ist in der Lage einige Funktionen aufzudecken bezogenen Adressen auf einfache und intuitive Art und Weise zu E-Mail (wie ein Benutzer durch ihre E-Mail-Adresse bekommen statt Benutzernamen und mehr Konten mit derselben E-Mail-Adresse zu verbieten). Wenn die Basisklasse nicht von dieser Annahme ausgeht, dann wollten jedes Mal, wenn Sie Sachen mit E-Mail in Ihrem bestimmten Anbieter tun, dann würden Sie den Verweis auf die spezifische Art werfen müssen Sie in Ihrer Anwendung verwenden. Dies ist umständlich.

Aus rein OO Sicht sind diese Annahmen unbequem. Aber Sie können, und viele der Mitglieder Anbietern lassen, bieten leere Implementierungen für Methoden und Eigenschaften von der Basisklasse, wenn sie nicht sie verwenden.

Sie sehen dies mehr mit Rollenanbietern ... zum Beispiel des Windows-Token Role Provider viele Mitglieder hat, die NotImplmentedException (die Token Rollenanbieter werfen ist ein Read-Only-Anbieter für AD, so dass alle von dem Eigenschaftssatz Accessoren werfen Ausnahmen).

Andere Tipps

Es kommt auf die Tatsache, dass der Mitgliedschaftsanbieter eine offensichtliche Zuordnung hat: RequiresQuestionAndAnswer , die Sie festlegen können, und haben dies durchgesetzt werden, aber Sie können nicht angeben, dass der Benutzer muss liefern eine E-Mail-Adresse.

angeben, dass sie eine eindeutige E-Mail-Adresse mit ValidateUser " -Methode , wird es den Standardanbieter in der web.config angegeben, dies zu tun:

  

Die Membership-Klasse basiert auf Mitgliedschaftsanbieter mit einer Datenquelle zu kommunizieren.


Als Reaktion Änderungen in Frage:

a. Das ist richtig, wie Stephen weist darauf hin, Sie einen Benutzer mit einer leeren E-Mail-Adresse haben könnte, und dann würden alle andere haben einen Wert haben. Je nach Ihren Validatoren, hat dies nicht wirklich eine gültige E-Mail-Adresse sein.

B.1. Nicht ganz - Die Anbieter senden Daten zu und von Ihrem Benutzerdatenspeicher - dies könnte SQL sein, aber es könnte auch Active Directory, LDAP, eine Textdatei, usw. sein, aber ja, Ihr Provider fungiert als seperation Schicht zwischen der Anwendung und Ihr Benutzerspeicher.

B.2. Es gibt viele Teile auf Mitgliedschaft - die Dokumentation über einen benutzerdefinierten Membership Benutzer Umsetzung führt dich durch die Schritte erforderlich, um einen individuellen Benutzer zu erstellen - wenn Sie Ihre Datenspeicherung keine E-Mail-Adressen verarbeiten hat (oder Sie mehr E-Mails gespeichert in einem Profil wollten), dann Ihr Provider konnte einfach ignorieren jeden Wert gesendet durch Sie unter erstellen oder Update, und füllen sie es mit null auf get.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top