Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Scott Mitchell
Hinweis
Da dieser Artikel geschrieben wurde, werden die ASP.NET Mitgliedschaftsanbieter von ASP.NET Identity abgelöst. Es wird dringend empfohlen, Apps so zu aktualisieren, dass sie die ASP.NET Identity Platform anstelle der Mitgliedschaftsanbieter verwenden, die zu dem Zeitpunkt dieses Artikels vorgestellt wurden. ASP.NET Identity hat eine Reihe von Vorteilen gegenüber dem ASP.NET Mitgliedschaftssystem, darunter:
- Bessere Leistung
- Verbesserte Erweiterbarkeit und Testbarkeit
- Unterstützung für OAuth, OpenID Connect und zweistufige Authentifizierung
- Anspruchsbasierte Identitätsunterstützung
- Bessere Interoperabilität mit ASP.Net Core
In diesem Lernprogramm wird gezeigt, wie Sie eine Webseite für Administratoren erstellen, um die gesperrten und genehmigten Status der Benutzer zu verwalten. Außerdem wird gezeigt, wie neue Benutzer erst genehmigt werden, nachdem sie ihre E-Mail-Adresse überprüft haben.
Einführung
Zusammen mit einem Benutzernamen, Kennwort und E-Mail verfügt jedes Benutzerkonto über zwei Statusfelder, die bestimmen, ob sich der Benutzer bei der Website anmelden kann: gesperrt und genehmigt. Ein Benutzer wird automatisch gesperrt, wenn er ungültige Anmeldeinformationen innerhalb einer bestimmten Anzahl von Minuten bereitstellt (die Standardeinstellungen sperren einen Benutzer nach 5 ungültigen Anmeldeversuchen innerhalb von 10 Minuten). Der genehmigte Status ist in Szenarien nützlich, in denen einige Aktionen stattfinden müssen, bevor ein neuer Benutzer sich bei der Website anmelden kann. Beispielsweise muss ein Benutzer zuerst seine E-Mail-Adresse überprüfen oder von einem Administrator genehmigt werden, bevor er sich anmelden kann.
Da sich ein gesperrter oder nicht genehmigter Benutzer nicht anmelden kann, ist es nur natürlich, sich zu fragen, wie diese Status zurückgesetzt werden können. ASP.NET enthält keine integrierten Funktionen oder Websteuerelemente zum Verwalten der gesperrten und genehmigten Status von Benutzern, da diese Entscheidungen auf Websitebasis behandelt werden müssen. Einige Websites genehmigen möglicherweise automatisch alle neuen Benutzerkonten (das Standardverhalten). Andere Systeme haben einen Administrator, der neue Konten genehmigt, oder genehmigen Benutzer erst, bis sie einen Link aufrufen, der an die beim Anmelden angegebene E-Mail-Adresse gesendet wird. Ebenso können einige Websites Benutzer sperren, bis ein Administrator seinen Status zurücksetzt, während andere Websites eine E-Mail an den gesperrten Benutzer mit einer URL senden, die er besuchen kann, um sein Konto zu entsperren.
In diesem Lernprogramm wird gezeigt, wie Sie eine Webseite für Administratoren erstellen, um die gesperrten und genehmigten Status der Benutzer zu verwalten. Außerdem wird gezeigt, wie neue Benutzer erst genehmigt werden, nachdem sie ihre E-Mail-Adresse überprüft haben.
Schritt 1: Verwalten der Gesperrten und genehmigten Status der Benutzer
Im Erstellen einer Schnittstelle zur Auswahl eines Benutzerkontos aus vielen Tutorial haben wir eine Seite erstellt, die jedes Benutzerkonto in einer seitenweise angezeigten und gefilterten GridView aufgelistet hat. Das Raster listet den Namen und die E-Mail jedes Benutzers, seine genehmigten und gesperrten Status auf, unabhängig davon, ob er derzeit online ist, und kommentare zum Benutzer. Um die genehmigten und gesperrten Status der Benutzer zu verwalten, können wir dieses Raster bearbeitbar machen. Um den genehmigten Status eines Benutzers zu ändern, würde der Administrator zuerst das Benutzerkonto finden und dann die entsprechende GridView-Zeile bearbeiten, das genehmigte Kontrollkästchen überprüfen oder deaktivieren. Alternativ können wir die genehmigten und gesperrten Status über eine separate ASP.NET-Seite verwalten.
In diesem Lernprogramm verwenden wir zwei ASP.NET Seiten: ManageUsers.aspx und UserInformation.aspx. Die Idee hier ist, dass ManageUsers.aspx die Benutzerkonten im System aufgelistet werden, während UserInformation.aspx der Administrator die genehmigten und gesperrten Status für einen bestimmten Benutzer verwalten kann. Unsere erste Aufgabe besteht darin, die GridView in ManageUsers.aspx zu erweitern, um ein HyperLinkField einzuschließen, das als Verknüpfungsspalte gerendert wird. Wir möchten, dass jeder Link auf UserInformation.aspx?user=UserName verweist, wobei UserName der Name des zu bearbeitenden Benutzers ist.
Hinweis
Wenn Sie den Code für das Lernprogramm zum Wiederherstellen und Ändern von Kennwörtern heruntergeladen haben, haben Sie möglicherweise bemerkt, dass die ManageUsers.aspx Seite bereits einen Satz von "Verwalten"-Links enthält und die UserInformation.aspx Seite eine Benutzeroberfläche zum Ändern des Kennworts des ausgewählten Benutzers bereitstellt. Ich habe beschlossen, diese Funktionalität im Code, der diesem Lernprogramm zugeordnet ist, nicht zu replizieren, da die Mitgliedschafts-API umgangen und direkt mit der SQL Server-Datenbank ausgeführt wird, um das Kennwort eines Benutzers zu ändern. Dieses Tutorial beginnt komplett von Grund auf mit der UserInformation.aspx Seite.
Hinzufügen von "Verwalten"-Links zurUserAccountsGridView
Öffnen Sie die ManageUsers.aspx Seite, und fügen Sie der UserAccounts GridView ein HyperLinkField hinzu. Setzen Sie die Eigenschaft Text des HyperLinkField auf "Manage" und die Eigenschaften DataNavigateUrlFields und DataNavigateUrlFormatString auf UserName bzw. "UserInformation.aspx?user={0}". Diese Einstellungen konfigurieren das HyperLinkField so, dass alle Hyperlinks den Text "Verwalten" anzeigen, aber jeder Link übergibt den entsprechenden UserName-Wert in die Abfragezeichenfolge.
Nachdem Sie das HyperLinkField zu GridView hinzugefügt haben, nehmen Sie sich einen Moment Zeit, um die ManageUsers.aspx Seite über einen Browser anzuzeigen. Wie in Abbildung 1 dargestellt, enthält jede GridView-Zeile jetzt einen Link "Verwalten". Der Link "Verwalten" für Bruce verweist auf UserInformation.aspx?user=Bruce, während der Link "Verwalten" für Dave auf UserInformation.aspx?user=Dave.
Abbildung 1: Das HyperLinkField fügt einen Link "Verwalten" für jedes Benutzerkonto hinzu (Klicken, um das Bild in voller Größe anzuzeigen)
Wir werden die Benutzeroberfläche und den Code für die UserInformation.aspx Seite in einem Moment erstellen, aber zuerst befassen wir uns damit, wie die gesperrten und genehmigten Status eines Benutzers programmgesteuert geändert werden. Die MembershipUser Klasse hat IsLockedOut und IsApproved Eigenschaften. Die IsLockedOut Eigenschaft ist schreibgeschützt. Es gibt keinen Mechanismus zum programmgesteuerten Sperren eines Benutzers; Um einen Benutzer zu entsperrenUnlockUser, verwenden Sie die Methode der Klasse. Die IsApproved Eigenschaft ist lesbar und schreibbar. Zum Speichern von Änderungen an dieser Eigenschaft müssen wir die Methode der Membership Klasse UpdateUseraufrufen und das geänderte MembershipUser Objekt übergeben.
Da die IsApproved Eigenschaft lesbar und schreibbar ist, ist ein CheckBox-Steuerelement wahrscheinlich das beste Benutzeroberflächenelement zum Konfigurieren dieser Eigenschaft. Ein CheckBox funktioniert jedoch nicht für die IsLockedOut Eigenschaft, da ein Administrator einen Benutzer nicht sperren kann, kann er nur einen Benutzer entsperren. Eine geeignete Benutzeroberfläche für die IsLockedOut Eigenschaft ist eine Schaltfläche, die beim Klicken auf das Benutzerkonto entsperrt wird. Diese Schaltfläche sollte nur aktiviert werden, wenn der Benutzer gesperrt ist.
Erstellen derUserInformation.aspxSeite
Wir sind nun bereit, die Benutzeroberfläche in UserInformation.aspx zu implementieren. Öffnen Sie diese Seite, und fügen Sie die folgenden Websteuerelemente hinzu:
- Ein HyperLink-Steuerelement, das beim Klicken den Administrator zurück zur
ManageUsers.aspx-Seite bringt. - Ein Label-Websteuerelement zur Anzeige des Namens des ausgewählten Benutzers. Dieses Label
IDaufUserNameLabelsetzen und seineText-Eigenschaft löschen. - Ein CheckBox-Steuerelement mit dem Namen
IsApproved. Legen Sie die EigenschaftAutoPostBackauftruefest. - Ein Bezeichnungssteuerelement zum Anzeigen des letzten Sperrdatums des Benutzers. Benennen Sie diese Bezeichnung
LastLockedOutDateLabel, und löschen Sie ihreTextEigenschaft. - Eine Schaltfläche zum Entsperren des Benutzers. Benennen Sie diese Schaltfläche
UnlockUserButton, und legen Sie dieTextEigenschaft auf "Benutzer entsperren" fest. - Ein Bezeichnungssteuerelement zum Anzeigen von Statusmeldungen, z. B. "Der genehmigte Status des Benutzers wurde aktualisiert." Benennen Sie dieses Steuerelement
StatusMessage, löschen Sie seineTextEigenschaft, und legen Sie dessenCssClassEigenschaft aufImportant. (DieImportantDie CSS-Klasse wird in derStyles.cssStylesheetdatei definiert; sie zeigt den entsprechenden Text in einer großen, roten Schriftart an.)
Nach dem Hinzufügen dieser Steuerelemente sollte die Entwurfsansicht in Visual Studio dem Screenshot in Abbildung 2 ähneln.
Abbildung 2: Erstellen der Benutzeroberfläche (UserInformation.aspxKlicken Sie hier, um das Bild in voller Größe anzuzeigen)
Nachdem die Benutzeroberfläche abgeschlossen ist, besteht die nächste Aufgabe darin, das IsApproved CheckBox-Steuerelement und andere Steuerelemente basierend auf den Informationen des ausgewählten Benutzers festzulegen. Erstellen Sie einen Ereignishandler für das Ereignis der Seite Load , und fügen Sie den folgenden Code hinzu:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// If querystring value is missing, send the user to ManageUsers.aspx
string userName = Request.QueryString["user"];
if (string.IsNullOrEmpty(userName))
Response.Redirect("ManageUsers.aspx");
// Get information about this user
MembershipUser usr = Membership.GetUser(userName);
if (usr == null)
Response.Redirect("ManageUsers.aspx");
UserNameLabel.Text = usr.UserName;
IsApproved.Checked = usr.IsApproved;
if (usr.LastLockoutDate.Year < 2000)
LastLockoutDateLabel.Text = string.Empty;
else
LastLockoutDateLabel.Text = usr.LastLockoutDate.ToShortDateString();
UnlockUserButton.Enabled = usr.IsLockedOut;
}
}
Der obige Code beginnt mit der Sicherstellung, dass dies der erste Besuch der Seite und kein nachfolgendes Postback ist. Anschließend liest er den Benutzernamen, der über das user Abfragezeichenfolgenfeld übergeben wird, und ruft Informationen zu diesem Benutzerkonto über die Membership.GetUser(username) Methode ab. Wenn kein Benutzername über die Abfragezeichenfolge bereitgestellt wurde oder der angegebene Benutzer nicht gefunden werden konnte, wird der Administrator an die ManageUsers.aspx Seite zurückgesendet.
Der Wert des MembershipUser Objekts wird dann in der UserNameLabel angezeigt, und die IsApproved CheckBox wird basierend auf dem IsApproved Eigenschaftswert aktiviert.
Die MembershipUser Eigenschaft des LastLockoutDate Objekts gibt einen DateTime Wert zurück, der angibt, wann der Benutzer zuletzt gesperrt wurde. Wenn der Benutzer nie gesperrt wurde, hängt der zurückgegebene Wert vom Mitgliedschaftsanbieter ab. Wenn ein neues Konto erstellt wird, legt das SqlMembershipProvider Feld der aspnet_Membership Tabelle LastLockoutDate auf 1754-01-01 12:00:00 AM. Der obenstehende Code zeigt eine leere Zeichenfolge in LastLockoutDateLabel an, wenn die Eigenschaft LastLockoutDate vor dem Jahr 2000 auftritt; andernfalls wird das Datum der Eigenschaft LastLockoutDate im Label angezeigt.
UnlockUserButton' Die Enabled Eigenschaft ist auf den Sperrstatus des Benutzers festgelegt, was bedeutet, dass diese Schaltfläche nur aktiviert wird, wenn der Benutzer gesperrt ist.
Nehmen Sie sich einen Moment Zeit, um die UserInformation.aspx Seite über einen Browser zu testen. Sie müssen natürlich bei ManageUsers.aspx beginnen und dann mit der Auswahl eines Benutzerkontos fortfahren, das Sie verwalten möchten. Beachten Sie bei der Ankunft an UserInformation.aspx, dass das IsApproved Kontrollkästchen nur markiert ist, wenn der Benutzer genehmigt ist. Wenn der Benutzer jemals gesperrt wurde, wird sein letztes Sperrdatum angezeigt. Die Schaltfläche "Benutzer entsperren" ist nur aktiviert, wenn der Benutzer zurzeit gesperrt ist. Das Aktivieren oder Deaktivieren des IsApproved CheckBox-Steuerelements oder das Klicken auf die Schaltfläche "Benutzer entsperren" bewirkt einen Postback, aber es werden keine Änderungen am Benutzerkonto vorgenommen, da wir noch Ereignishandler für diese Ereignisse erstellen werden.
Kehren Sie zu Visual Studio zurück, und erstellen Sie Ereignishandler für das IsApproved CheckBox-Ereignis CheckedChanged und das UnlockUser Button-Ereignis Click . Legen Sie im CheckedChanged-Ereignishandler die Eigenschaft des Benutzers auf die Eigenschaft IsApproved der CheckBox fest. Speichern Sie anschließend die Änderungen durch einen Aufruf von Membership.UpdateUser. Rufen Sie im Click Ereignishandler einfach die Methode des MembershipUserUnlockUser Objekts auf. Zeigen Sie in beiden Ereignishandlern eine geeignete Meldung in der StatusMessage Bezeichnung an.
protected void IsApproved_CheckedChanged(object sender, EventArgs e)
{
// Toggle the user's approved status
string userName = Request.QueryString["user"];
MembershipUser usr = Membership.GetUser(userName);
usr.IsApproved = IsApproved.Checked;
Membership.UpdateUser(usr);
StatusMessage.Text = "The user's approved status has been updated.";
}
protected void UnlockUserButton_Click(object sender, EventArgs e)
{
// Unlock the user account
string userName = Request.QueryString["user"];
MembershipUser usr = Membership.GetUser(userName);
usr.UnlockUser();
UnlockUserButton.Enabled = false;
StatusMessage.Text = "The user account has been unlocked.";
}
Testen derUserInformation.aspxSeite
Wenn diese Ereignishandler vorhanden sind, besuchen Sie die Seite erneut und lehnen Sie einen Benutzer ab. Wie in Abbildung 3 dargestellt, sollte auf der Seite eine kurze Meldung angezeigt werden, die angibt, dass die Eigenschaft des IsApproved Benutzers erfolgreich geändert wurde.
Abbildung 3: Chris wurde nicht genehmigt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Melden Sie sich als Nächstes ab, und versuchen Sie, sich als Benutzer anzumelden, dessen Konto gerade nicht genehmigt wurde. Da der Benutzer nicht genehmigt ist, kann er sich nicht anmelden. Standardmäßig zeigt das Anmeldesteuerelement dieselbe Meldung an, wenn sich der Benutzer unabhängig vom Grund nicht anmelden kann. Im Tutorial "Überprüfung der Benutzeranmeldeinformationen gegenüber dem Mitgliedschaftsbenutzerverzeichnis" haben wir jedoch die Verbesserung des Anmeldesteuerelements untersucht, um eine geeignetere Meldung anzuzeigen. Wie in Abbildung 4 dargestellt, wird Chris eine Meldung gezeigt, die erklärt, dass er sich nicht anmelden kann, weil sein Konto noch nicht genehmigt wurde.
Abbildung 4: Chris Kann sich nicht anmelden, weil sein Konto nicht genehmigt ist (Klicken Sie hier, um das Bild mit voller Größe anzuzeigen)
Um die gesperrte Funktionalität zu testen, versuchen Sie, sich als genehmigter Benutzer anzumelden, verwenden Sie jedoch ein falsches Kennwort. Wiederholen Sie diesen Vorgang, bis das Konto des Benutzers gesperrt wurde. Das Anmeldesteuerelement wurde auch aktualisiert, um eine benutzerdefinierte Nachricht anzuzeigen, wenn versucht wird, sich von einem gesperrten Konto anzumelden. Sie wissen, dass ein Konto gesperrt wurde, nachdem Sie die folgende Meldung auf der Anmeldeseite angezeigt haben: "Ihr Konto wurde aufgrund zu vieler ungültiger Anmeldeversuche gesperrt. Wenden Sie sich an den Administrator, damit Ihr Konto entsperrt ist."
Kehren Sie zur Seite zurück ManageUsers.aspx , und klicken Sie auf den Link "Verwalten" für den gesperrten Benutzer. Wie in Abbildung 5 dargestellt, sollten Sie einen Wert im LastLockedOutDateLabel sehen, und die Schaltfläche "Benutzer entsperren" sollte aktiviert sein. Klicken Sie auf die Schaltfläche "Benutzer entsperren", um das Benutzerkonto zu entsperren. Nachdem Sie den Benutzer entsperrt haben, kann er sich erneut anmelden.
Abbildung 5: Dave wurde aus dem System ausgesperrt (Klicken Sie, um das Bild in voller Größe anzuzeigen)
Schritt 2: Festlegen des genehmigten Status neuer Benutzer
Der genehmigte Status ist in Szenarien hilfreich, in denen einige Aktionen ausgeführt werden sollen, bevor ein neuer Benutzer sich anmelden und auf die benutzerspezifischen Features der Website zugreifen kann. Sie können beispielsweise eine private Website ausführen, auf der alle Seiten, mit Ausnahme der Anmelde- und Anmeldeseiten, nur für authentifizierte Benutzer zugänglich sind. Aber was passiert, wenn ein Fremder Ihre Website erreicht, die Anmeldeseite findet und ein Konto erstellt? Um zu verhindern, dass dies geschieht, können Sie die Anmeldeseite in einen Administration Ordner verschieben und erfordern, dass ein Administrator jedes Konto manuell erstellt. Alternativ können Sie zulassen, dass sich jeder anmeldet, aber den Websitezugriff verbieten, bis ein Administrator das Benutzerkonto genehmigt.
Standardmäßig genehmigt das CreateUserWizard-Steuerelement neue Konten. Sie können dieses Verhalten mithilfe der Eigenschaft des Steuerelements DisableCreatedUserkonfigurieren. Legen Sie diese Eigenschaft so fest, dass true keine neuen Benutzerkonten genehmigt werden.
Hinweis
Standardmäßig meldet sich das CreateUserWizard-Steuerelement automatisch beim neuen Benutzerkonto an. Dieses Verhalten wird durch die Eigenschaft des Steuerelements LoginCreatedUserbestimmt. Da sich nicht genehmigte Benutzer nicht bei der Website anmelden können, wird das neue Benutzerkonto DisableCreatedUsertrue unabhängig vom Wert der Eigenschaft LoginCreatedUser nicht bei der Website angemeldet.
Wenn Sie programmgesteuert neue Benutzerkonten über die Membership.CreateUser Methode erstellen, verwenden Sie zum Erstellen eines nicht genehmigten Benutzerkontos eine der Überladungen, die den Eigenschaftswert des IsApproved neuen Benutzers als Eingabeparameter akzeptieren.
Schritt 3: Genehmigen von Benutzern durch Überprüfen ihrer E-Mail-Adresse
Viele Websites, die Benutzerkonten unterstützen, genehmigen keine neuen Benutzer, bis sie die E-Mail-Adresse überprüfen, die sie bei der Registrierung angegeben haben. Dieser Verifizierungsprozess wird häufig verwendet, um Bots, Spammer und andere Übeltäter abzuhalten, da er eine eindeutige, verifizierte E-Mail-Adresse erfordert und einen zusätzlichen Schritt im Anmeldevorgang hinzufügt. Wenn sich ein neuer Benutzer mit diesem Modell anmeldet, wird eine E-Mail-Nachricht gesendet, die einen Link zu einer Überprüfungsseite enthält. Durch den Besuch des Links hat der Benutzer nachgewiesen, dass er die E-Mail erhalten hat und daher die angegebene E-Mail-Adresse gültig ist. Die Überprüfungsseite ist für die Genehmigung des Benutzers verantwortlich. Dies kann automatisch geschehen, wodurch jeder Benutzer, der diese Seite erreicht, oder erst nach der Bereitstellung zusätzlicher Informationen, z. B. einer CAPTCHA, genehmigt wird.
Um diesen Workflow zu berücksichtigen, müssen wir zuerst die Kontoerstellungsseite aktualisieren, damit neue Benutzer nicht genehmigt werden. Öffnen Sie die EnhancedCreateUserWizard.aspx Seite im Membership Ordner, und legen Sie die Eigenschaft des CreateUserWizard-Steuerelements DisableCreatedUser auf true.
Als Nächstes müssen wir das CreateUserWizard-Steuerelement konfigurieren, um eine E-Mail an den neuen Benutzer zu senden, mit Anweisungen zum Überprüfen ihres Kontos. Insbesondere fügen wir einen Link in die E-Mail auf die Verification.aspx Seite (die wir noch erstellen müssen) ein, und übergeben die Abfragezeichenfolge des neuen Benutzers UserId . Auf der Verification.aspx Seite wird der angegebene Benutzer gesucht und als genehmigt markiert.
Senden einer Überprüfungs-E-Mail an neue Benutzer
Um eine E-Mail aus dem CreateUserWizard-Steuerelement zu senden, konfigurieren Sie ihre MailDefinition Eigenschaft entsprechend. Wie im vorherigen Lernprogramm erläutert, enthalten die ChangePassword- und PasswordRecovery-Steuerelemente eine MailDefinition Eigenschaft , die auf die gleiche Weise wie das CreateUserWizard-Steuerelement funktioniert.
Hinweis
Um die MailDefinition-Eigenschaft zu verwenden, müssen Sie Mail-Zustellungsoptionen in Web.config angeben. Weitere Informationen finden Sie unter Senden von E-Mails in ASP.NET.
Erstellen Sie zunächst eine neue E-Mail-Vorlage namens CreateUserWizard.txt im EmailTemplates Ordner. Verwenden Sie den folgenden Text für die Vorlage:
Hello <%UserName%>! Welcome aboard.
Your new account is almost ready, but before you can login you must first visit:
<%VerificationUrl%>
Once you have visited the verification URL you will be redirected to the login page.
If you have any problems or questions, please reply to this email.
Thanks!
Setzen Sie die MailDefinition'-Eigenschaft auf BodyFileName "~/EmailTemplates/CreateUserWizard.txt" und die Subject-Eigenschaft auf "Willkommen bei meiner Website!" Bitte aktivieren Sie Ihr Konto."
Beachten Sie, dass die CreateUserWizard.txt E-Mail-Vorlage einen <%VerificationUrl%> Platzhalter enthält. Hier wird die URL für die Verification.aspx Seite platziert. Der CreateUserWizard ersetzt automatisch die <%UserName%> und <%Password%> Platzhalter durch den Benutzernamen und das Kennwort des neuen Kontos, aber es gibt keinen integrierten <%VerificationUrl%> Platzhalter. Wir müssen sie manuell durch die entsprechende Überprüfungs-URL ersetzen.
Erstellen Sie dazu einen Ereignishandler für das CreateUserWizard-EreignisSendingMail, und fügen Sie den folgenden Code hinzu:
protected void NewUserWizard_SendingMail(object sender, MailMessageEventArgs e)
{
// Get the UserId of the just-added user
MembershipUser newUser = Membership.GetUser(NewUserWizard.UserName);
Guid newUserId = (Guid)newUser.ProviderUserKey;
// Determine the full verification URL (i.e., http://yoursite.com/Verification.aspx?ID=...)
string urlBase = Request.Url.GetLeftPart(UriPartial.Authority) +
Request.ApplicationPath;
string verifyUrl = "/Verification.aspx?ID=" + newUserId.ToString();
string fullUrl = urlBase + verifyUrl;
// Replace <%VerificationUrl%> with the appropriate URL and querystring
e.Message.Body = e.Message.Body.Replace("<%VerificationUrl%>", fullUrl);
}
Das SendingMail Ereignis wird nach dem CreatedUser Ereignis ausgelöst, d. h., wenn der obige Ereignishandler das neue Benutzerkonto bereits erstellt hat. Wir können auf den Wert des UserId neuen Benutzers zugreifen, indem wir die Membership.GetUser Methode aufrufen und das UserName eingegebene CreateUserWizard-Steuerelement übergeben. Als Nächstes wird die Überprüfungs-URL gebildet. Die Anweisung Request.Url.GetLeftPart(UriPartial.Authority) gibt den http://yourserver.com Teil der URL zurück; Request.ApplicationPath gibt den Pfad zurück, in dem die Anwendung verwurzelt ist. Die Überprüfungs-URL wird dann als Verification.aspx?ID=userIddefiniert. Diese beiden Zeichenfolgen werden dann verkettet, um die vollständige URL zu bilden. Der Textkörper der E-Mail-Nachricht (e.Message.Body) hat schließlich alle Vorkommen von <%VerificationUrl%> durch die vollständige URL ersetzt.
Der Nettoeffekt ist, dass neue Benutzer nicht genehmigt werden, was bedeutet, dass sie sich nicht bei der Website anmelden können. Darüber hinaus werden sie automatisch eine E-Mail mit einem Link zur Überprüfungs-URL gesendet (siehe Abbildung 6).
Abbildung 6: Der neue Benutzer empfängt eine E-Mail mit einem Link zur Überprüfungs-URL (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Hinweis
Der Standardmäßige CreateUserWizard-Schritt des CreateUserWizard-Steuerelements zeigt eine Meldung an, die den Benutzer darüber informiert, dass sein Konto erstellt wurde, und es wird eine Schaltfläche "Weiter" angezeigt. Wenn Sie auf diese Schaltfläche klicken, gelangen Sie zu der URL, die durch die Eigenschaft des Steuerelements ContinueDestinationPageUrl angegeben wird. Die CreateUserWizard-Datei EnhancedCreateUserWizard.aspx ist so konfiguriert, dass neue Benutzer an die ~/Membership/AdditionalUserInfo.aspxAdresse gesendet werden, die den Benutzer zur Eingabe ihrer Heimat, der Homepage-URL und der Signatur auffordert. Da diese Informationen nur von angemeldeten Benutzern hinzugefügt werden können, ist es sinnvoll, diese Eigenschaft zu aktualisieren, um Benutzer zurück an die Homepage der Website (~/Default.aspx) zu senden. Darüber hinaus sollte die EnhancedCreateUserWizard.aspx Seite oder der Schritt "CreateUserWizard" erweitert werden, um den Benutzer darüber zu informieren, dass er eine Überprüfungs-E-Mail gesendet hat und sein Konto erst aktiviert wird, wenn er den Anweisungen in dieser E-Mail folgt. Ich überlasse diese Änderungen als Übung für den Leser.
Erstellen der Überprüfungsseite
Unsere letzte Aufgabe besteht darin, die Verification.aspx Seite zu erstellen. Fügen Sie diese Seite dem Stammordner hinzu und verknüpfen Sie sie mit der Site.master Masterseite. Wie bei den meisten vorherigen Inhaltsseiten, die zur Website hinzugefügt wurden, entfernen Sie das Inhaltssteuerelement, das auf den LoginContent ContentPlaceHolder verweist, damit die Inhaltsseite den Standardinhalt der Masterseite verwendet.
Fügen Sie der Verification.aspx-Seite eine Bezeichnungswebsteuerung hinzu, setzen Sie ID auf StatusMessage und löschen Sie die Texteigenschaft. Erstellen Sie als Nächstes den Page_Load Ereignishandler, und fügen Sie den folgenden Code hinzu:
protected void Page_Load(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(Request.QueryString["ID"]))
StatusMessage.Text = "The UserId was not included in the querystring...";
else
{
Guid userId;
try
{
userId = new Guid(Request.QueryString["ID"]);
}
catch
{
StatusMessage.Text = "The UserId passed into the querystring is not in the
proper format...";
return;
}
MembershipUser usr = Membership.GetUser(userId);
if (usr == null)
StatusMessage.Text = "User account could not be found...";
else
{
// Approve the user
usr.IsApproved = true;
Membership.UpdateUser(usr);
StatusMessage.Text = "Your account has been approved.
Please <a href=\"Login.aspx\">login</a> to the site.";
}
}
}
Der Großteil des obigen Codes überprüft, ob die UserId über die Abfragezeichenfolge bereitgestellte Datei vorhanden ist, dass es sich um einen gültigen Guid Wert handelt und auf ein vorhandenes Benutzerkonto verweist. Wenn alle diese Prüfungen bestehen, wird das Benutzerkonto genehmigt; andernfalls wird eine geeignete Statusmeldung angezeigt.
Abbildung 7 zeigt die Verification.aspx Seite, wenn sie über einen Browser besucht wird.
Abbildung 7: Das Konto des neuen Benutzers ist jetzt genehmigt (Klicken Sie hier, um das Bild mit voller Größe anzuzeigen)
Zusammenfassung
Alle Mitgliedschaftsbenutzerkonten verfügen über zwei Status, die bestimmen, ob sich der Benutzer bei der Website anmelden kann: IsLockedOut und IsApproved. Beide Eigenschaften müssen true sein, damit sich der Benutzer anmelden kann.
Der Sperrstatus des Benutzers wird als Sicherheitsmaßnahme verwendet, um die Wahrscheinlichkeit zu verringern, dass ein Hacker durch Brute-Force-Methoden in eine Website einbricht. Insbesondere wird ein Benutzer gesperrt, wenn innerhalb eines bestimmten Zeitfensters eine bestimmte Anzahl ungültiger Anmeldeversuche vorhanden ist. Diese Grenzen können über die Mitgliedschaftsanbietereinstellungen in Web.configkonfiguriert werden.
Der genehmigte Status wird häufig als Mittel verwendet, um zu verhindern, dass sich neue Benutzer anmelden, bis eine Aktion abgelaufen ist. Möglicherweise erfordert die Website, dass neue Konten zuerst vom Administrator genehmigt werden, oder, wie wir in Schritt 3 gesehen haben, indem sie ihre E-Mail-Adresse überprüfen.
Glückliche Programmierung!
Zum Autor
Scott Mitchell, Autor mehrerer ASP/ASP.NET Bücher und Gründer von 4GuysFromRolla.com, arbeitet seit 1998 mit Microsoft Web Technologies zusammen. Scott arbeitet als unabhängiger Berater, Trainer und Schriftsteller. Sein neuestes Buch ist Sams Teach Yourself ASP.NET 2.0 in 24 Stunden. Scott kann unter mitchell@4guysfromrolla.com erreicht werden oder über seinen Blog unter http://ScottOnWriting.NET.
Besonderer Dank an...
Diese Lernprogrammreihe wurde von vielen hilfreichen Prüfern überprüft. Möchten Sie meine bevorstehenden MSDN-Artikel überprüfen? Wenn das der Fall ist, schreiben Sie mir eine Nachricht an mitchell@4GuysFromRolla.com