Share via


Entsperren und Genehmigen von Benutzerkonten (VB)

von Scott Mitchell

Hinweis

Seit diesem Artikel wurden 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 zum Zeitpunkt der Veröffentlichung 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
  • Unterstützung für anspruchsbasierte Identitäten
  • Bessere Interoperabilität mit ASP.Net Core

In diesem Tutorial erfahren Sie, wie Sie eine Webseite für Administratoren erstellen, um den Status gesperrter und genehmigter Benutzer zu verwalten. Außerdem erfahren Sie, wie Sie neue Benutzer erst genehmigen, nachdem sie ihre E-Mail-Adresse überprüft haben.

Einführung

Zusammen mit einem Benutzernamen, einem Kennwort und einer E-Mail-Adresse verfügt jedes Benutzerkonto über zwei status Felder, die festlegen, ob sich der Benutzer bei der Website anmelden kann: gesperrt und genehmigt. Ein Benutzer wird automatisch gesperrt, wenn er innerhalb einer angegebenen Anzahl von Minuten ungültige Anmeldeinformationen bereitstellt (die Standardeinstellungen sperren einen Benutzer nach fünf ungültigen Anmeldeversuchen innerhalb von 10 Minuten aus). Die genehmigte status ist in Szenarien nützlich, in denen einige Aktionen ausgeführt werden müssen, bevor sich ein neuer Benutzer bei der Website anmelden kann. Beispielsweise muss ein Benutzer möglicherweise 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 von Gesperrten und Genehmigten Status von Benutzern, zum Teil, weil diese Entscheidungen websiteweise behandelt werden müssen. Einige Websites genehmigen möglicherweise automatisch alle neuen Benutzerkonten (das Standardverhalten). Andere haben einen Administrator, der neue Konten genehmigt, oder genehmigen Benutzer erst, wenn sie einen Link aufrufen, der an die E-Mail-Adresse gesendet wurde, die bei der Registrierung angegeben wurde. Ebenso können einige Websites Benutzer sperren, bis ein Administrator ihre status zurücksetzt, während andere Websites eine E-Mail mit einer URL an den gesperrten Benutzer senden, die er besuchen kann, um sein Konto zu entsperren.

In diesem Tutorial erfahren Sie, wie Sie eine Webseite für Administratoren erstellen, um den Status gesperrter und genehmigter Benutzer zu verwalten. Außerdem erfahren Sie, wie Sie neue Benutzer erst genehmigen, nachdem sie ihre E-Mail-Adresse überprüft haben.

Schritt 1: Verwalten der Status "Gesperrte Benutzer" und "Genehmigt"

Im Tutorial Erstellen einer Schnittstelle zum Auswählen eines Benutzerkontos aus vielen haben wir eine Seite erstellt, auf der jedes Benutzerkonto in einem ausgelagerten, gefilterten GridView-Objekt aufgeführt ist. Das Raster listet den Namen und die E-Mail-Adresse der einzelnen Benutzer, deren Status "Genehmigt" und "Gesperrt" auf, ob er derzeit online ist, und kommentare zu dem Benutzer. Um den Status "Genehmigt" und "Gesperrt" von Benutzern zu verwalten, können wir dieses Raster bearbeitbar machen. Um die genehmigte status eines Benutzers zu ändern, sucht der Administrator zuerst das Benutzerkonto und bearbeitet dann die entsprechende GridView-Zeile, wobei das Kontrollkästchen genehmigt aktiviert oder deaktiviert wird. Alternativ können wir die Status "Genehmigt" und "Gesperrt" über eine separate ASP.NET Seite verwalten.

In diesem Tutorial verwenden wir zwei ASP.NET Seiten: ManageUsers.aspx und UserInformation.aspx. Die Idee ist, dass ManageUsers.aspx die Benutzerkonten im System aufgelistet werden, während UserInformation.aspx der Administrator die Status "Genehmigt" und "Gesperrt" für einen bestimmten Benutzer verwalten kann. Unsere erste Reihenfolge besteht darin, die GridView ManageUsers.aspx in zu erweitern, um ein HyperLinkField einzuschließen, das als Spalte mit Links gerendert wird. Jeder Link soll auf UserInformation.aspx?user=UserNamezeigen, wobei UserName der Name des zu bearbeitenden Benutzers ist.

Hinweis

Wenn Sie den Code für das Tutorial 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 Schnittstelle zum Ändern des Kennworts des ausgewählten Benutzers bietet. Ich habe mich entschieden, diese Funktionalität im Code, der diesem Tutorial zugeordnet ist, nicht zu replizieren, da die Mitgliedschafts-API umgangen und direkt mit der SQL Server-Datenbank ausgeführt wurde, um das Kennwort eines Benutzers zu ändern. Dieses Tutorial beginnt von Grund auf mit der UserInformation.aspx Seite.

Öffnen Sie die ManageUsers.aspx Seite, und fügen Sie der UserAccounts GridView ein HyperLinkField hinzu. Legen Sie die HyperLinkField-Eigenschaft Text auf "Manage" und die zugehörigen DataNavigateUrlFields Eigenschaften und DataNavigateUrlFormatString auf UserName bzw. "UserInformation.aspx?user={0}" fest. Diese Einstellungen konfigurieren hyperLinkField so, dass alle Hyperlinks den Text "Verwalten" anzeigen, aber jeder Link den entsprechenden UserName-Wert an die querystring übergibt.

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 zeigt auf UserInformation.aspx?user=Bruce, während der Link "Verwalten" für Dave auf UserInformation.aspx?user=Daveverweist.

Das HyperLinkField fügt ein

Abbildung 1: HyperLinkField fügt einen "Verwalten"-Link für jedes Benutzerkonto hinzu (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Wir erstellen die Benutzeroberfläche und den Code für die UserInformation.aspx Seite in kürze, aber lassen Sie uns zunächst darüber sprechen, wie Sie den Gesperrten und genehmigten Status eines Benutzers programmgesteuert ändern. Die MembershipUser -Klasse verfügt über IsLockedOut - und IsApproved -Eigenschaften. Die IsLockedOut-Eigenschaft ist schreibgeschützt. Es gibt keinen Mechanismus zum programmgesteuerten Sperren eines Benutzers. Um einen Benutzer zu entsperren, verwenden Sie die -Methode derUnlockUserMembershipUser -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-Objekt funktioniert jedoch nicht für die IsLockedOut Eigenschaft, da ein Administrator einen Benutzer nicht sperren kann, er darf nur einen Benutzer entsperren. Eine geeignete Benutzeroberfläche für die IsLockedOut Eigenschaft ist eine Schaltfläche, die beim Klicken das Benutzerkonto entsperrt. Diese Schaltfläche sollte nur aktiviert werden, wenn der Benutzer gesperrt ist.

Erstellen derUserInformation.aspxSeite

Wir sind jetzt bereit, die Benutzeroberfläche in UserInformation.aspxzu implementieren. Öffnen Sie diese Seite, und fügen Sie die folgenden Websteuerelemente hinzu:

  • Ein HyperLink-Steuerelement, das beim Klicken den Administrator zur ManageUsers.aspx Seite zurückgibt.
  • Ein Label Web-Steuerelement zum Anzeigen des Namens des ausgewählten Benutzers. Legen Sie diese Bezeichnung ID auf fest UserNameLabel , und löschen Sie die Text-Eigenschaft.
  • Ein CheckBox-Steuerelement mit dem Namen IsApproved. Legen Sie die zugehörige AutoPostBack-Eigenschaft auf True fest.
  • Ein Label-Steuerelement zum Anzeigen des letzten Sperrdatums des Benutzers. Benennen Sie diese Bezeichnung, LastLockedOutDateLabel und löschen Sie die Text -Eigenschaft.
  • Eine Schaltfläche zum Entsperren des Benutzers. Nennen Sie diese Schaltfläche, UnlockUserButton und legen Sie die Text -Eigenschaft auf "Benutzer entsperren" fest.
  • Ein Bezeichnungssteuerelement zum Anzeigen status Meldungen, z. B. "Die genehmigte status des Benutzers wurde aktualisiert." Nennen Sie dieses SteuerelementStatusMessage, löschen Sie seine Text -Eigenschaft, und legen Sie seine CssClass -Eigenschaft auf festImportant. (Die Important Die CSS-Klasse ist in der Styles.css Stylesheetdatei definiert und zeigt den entsprechenden Text in einer großen, roten Schriftart an.)

Nach dem Hinzufügen dieser Steuerelemente sollte die Entwurfsansicht in Visual Studio ähnlich dem Screenshot in Abbildung 2 aussehen.

Erstellen der Benutzeroberfläche für UserInformation.aspx

Abbildung 2: Erstellen der Benutzeroberfläche für UserInformation.aspx (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Nachdem die Benutzeroberfläche abgeschlossen ist, besteht unsere 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 Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     If Not Page.IsPostBack Then
          ' If querystring value is missing, send the user to ManageUsers.aspx
          Dim userName As String = Request.QueryString("user")
          If String.IsNullOrEmpty(userName) Then
               Response.Redirect("ManageUsers.aspx")
          End If

          ' Get information about this user
          Dim usr As MembershipUser = Membership.GetUser(userName)
          If usr Is Nothing Then
               Response.Redirect("ManageUsers.aspx")

          End If

          UserNameLabel.Text = usr.UserName
          IsApproved.Checked = usr.IsApproved

          If usr.LastLockoutDate.Year < 2000 Then
               LastLockoutDateLabel.Text = String.Empty
          Else
               LastLockoutDateLabel.Text = usr.LastLockoutDate.ToShortDateString()
               UnlockUserButton.Enabled = usr.IsLockedOut
          End If
     End If
End Sub

Der obige Code stellt zunächst sicher, dass dies der erste Besuch der Seite und kein nachfolgendes Postback ist. Anschließend liest er den Benutzernamen, der durch das Feld querystring user übergeben wird, und ruft Informationen zu diesem Benutzerkonto über die Membership.GetUser(username) -Methode ab. Wenn über die Abfragezeichenfolge kein Benutzername angegeben wurde oder der angegebene Benutzer nicht gefunden werden konnte, wird der Administrator zurück zur ManageUsers.aspx Seite gesendet.

Der MembershipUser Wert des UserName Objekts wird dann im UserNameLabel angezeigt, und das IsApproved CheckBox-Objekt wird basierend auf dem IsApproved Eigenschaftswert aktiviert.

Die MembershipUser-Eigenschaft desLastLockoutDate Objekts gibt einen DateTime Wert zurück, der angibt, wann der Benutzer zuletzt gesperrt wurde. Wenn der Benutzer noch 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 fest 1754-01-01 12:00:00 AM. Der obige Code zeigt eine leere Zeichenfolge im LastLockoutDateLabel an, wenn die LastLockoutDate Eigenschaft vor dem Jahr 2000 auftritt. Andernfalls wird der Datumsteil der LastLockoutDate Eigenschaft in der Bezeichnung angezeigt. Die UnlockUserButton-Eigenschaft des Enabled Benutzers ist auf die gesperrte status 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 ein Zu verwaltende Benutzerkonto auswählen. Wenn Sie bei UserInformation.aspxankommen, beachten Sie, dass das IsApproved CheckBox-Element nur aktiviert wird, wenn der Benutzer genehmigt wurde. Wenn der Benutzer jemals gesperrt wurde, wird sein Datum für die letzte Sperrung angezeigt. Die Schaltfläche Benutzer entsperren ist nur aktiviert, wenn der Benutzer derzeit gesperrt ist. Das Aktivieren oder Deaktivieren des IsApproved CheckBox-Steuerelements oder das Klicken auf die Schaltfläche Benutzer entsperren führt zu einem Postback, aber es werden keine Änderungen am Benutzerkonto vorgenommen, da wir noch Ereignishandler für diese Ereignisse erstellt haben.

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 IsApproved Benutzers auf die Checked -Eigenschaft des CheckBox-Objekts fest, und speichern Sie die Änderungen dann über einen Aufruf von Membership.UpdateUser. Rufen Sie im Click Ereignishandler einfach die MembershipUser -Methode des UnlockUser Objekts auf. Zeigen Sie in beiden Ereignishandlern eine geeignete Meldung in der StatusMessage Bezeichnung an.

Protected Sub IsApproved_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles IsApproved.CheckedChanged
     'Toggle the user's approved status
     Dim userName As String = Request.QueryString("user")
     Dim usr As MembershipUser = Membership.GetUser(userName)
     usr.IsApproved = IsApproved.Checked
     Membership.UpdateUser(usr)

     StatusMessage.Text = "The user's approved status has been updated."

End Sub

Protected Sub UnlockUserButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles UnlockUserButton.Click
     'Unlock the user account
     Dim userName As String = Request.QueryString("user")
     Dim usr As MembershipUser = Membership.GetUser(userName)
     usr.UnlockUser()
     UnlockUserButton.Enabled = False

     StatusMessage.Text = "The user account has been unlocked."
End Sub

Testen derUserInformation.aspxSeite

Wenn diese Ereignishandler vorhanden sind, rufen Sie die Seite erneut auf, und heben Sie die Genehmigung eines Benutzers auf. Wie Abbildung 3 zeigt, sollte auf der Seite eine kurze Meldung angezeigt werden, die angibt, dass die Eigenschaft des IsApproved Benutzers erfolgreich geändert wurde.

Chris wurde nicht genehmigt

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 Der Benutzer anzumelden, dessen Konto gerade nicht genehmigt wurde. Da der Benutzer nicht genehmigt wurde, kann er sich nicht anmelden. Standardmäßig zeigt das Login-Steuerelement die gleiche Meldung an, wenn sich der Benutzer unabhängig vom Grund nicht anmelden kann. Im Tutorial Überprüfen von Benutzeranmeldeinformationen für den Mitgliedschaftsbenutzerspeicher haben wir uns jedoch mit der Verbesserung des Anmeldesteuerelements befasst, um eine geeignetere Meldung anzuzeigen. Wie Abbildung 4 zeigt, wird Chris eine Meldung angezeigt, in der erklärt wird, dass er sich nicht anmelden kann, weil sein Konto noch nicht genehmigt wurde.

Chris kann sich nicht anmelden, weil sein Konto nicht genehmigt ist

Abbildung 4: Chris kann sich nicht anmelden, weil sein Konto nicht genehmigt ist (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Um die Gesperrte Funktionalität zu testen, versuchen Sie, sich als genehmigter Benutzer anzumelden, aber verwenden Sie ein falsches Kennwort. Wiederholen Sie diesen Vorgang so oft, 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 aus anzumelden. Sie wissen, dass ein Konto gesperrt wurde, sobald die folgende Meldung auf der Anmeldeseite angezeigt wird: "Ihr Konto wurde aufgrund von zu vielen ungültigen Anmeldeversuchen gesperrt. Wenden Sie sich an den Administrator, damit Ihr Konto entsperrt wird."

Kehren Sie zur ManageUsers.aspx Seite zurück, und klicken Sie auf den Link Verwalten für den gesperrten Benutzer. Wie abbildung 5 zeigt, sollte ein Wert in der LastLockedOutDateLabel Schaltfläche Benutzer entsperren 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.

Dave wurde aus dem System gesperrt

Abbildung 5: Dave wurde aus dem System gesperrt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Schritt 2: Angeben des Status "Genehmigt" für neue Benutzer

Die genehmigte status ist nützlich in Szenarien, in denen Eine Aktion ausgeführt werden soll, bevor ein neuer Benutzer sich anmelden und auf die benutzerspezifischen Features der Website zugreifen kann. Beispielsweise können Sie eine private Website ausführen, auf der alle Seiten mit Ausnahme der Anmelde- und Registrierungsseiten nur für authentifizierte Benutzer zugänglich sind. Aber was passiert, wenn ein Fremder Ihre Website erreicht, die Registrierungsseite findet und ein Konto erstellt? Um dies zu verhindern, können Sie die Registrierungsseite in einen Administration Ordner verschieben und verlangen, dass ein Administrator jedes Konto manuell erstellt. Alternativ können Sie jedem erlauben, sich zu registrieren, aber den Websitezugriff zu 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 auf fest True , um keine neuen Benutzerkonten zu genehmigen.

Hinweis

Standardmäßig meldet das CreateUserWizard-Steuerelement automatisch das neue Benutzerkonto an. Dieses Verhalten wird durch die -Eigenschaft des Steuerelements LoginCreatedUserdiktiert. Da sich nicht genehmigte Benutzer nicht bei der Website anmelden können, DisableCreatedUser ist True das neue Benutzerkonto nicht bei der Website angemeldet, unabhängig vom Wert der LoginCreatedUser Eigenschaft.

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 Email Adresse

Viele Websites, die Benutzerkonten unterstützen, genehmigen neue Benutzer erst, wenn sie die E-Mail-Adresse überprüfen, die sie bei der Registrierung angegeben haben. Dieser Überprüfungsprozess wird häufig verwendet, um Bots, Spammer und andere ne'er-do-wells abzuwehren, da er eine eindeutige, verifizierte E-Mail-Adresse erfordert und einen zusätzlichen Schritt im Registrierungsprozess hinzufügt. Bei diesem Modell erhält ein neuer Benutzer, wenn er sich registriert, eine E-Mail-Nachricht, die einen Link zu einer Überprüfungsseite enthält. Durch den Besuch des Links hat der Nutzer nachgewiesen, dass er die E-Mail erhalten hat und somit die angegebene E-Mail-Adresse gültig ist. Die Überprüfungsseite ist für die Genehmigung des Benutzers zuständig. Dies kann automatisch geschehen, wodurch jeder Benutzer genehmigt wird, der diese Seite erreicht, oder erst, nachdem der Benutzer einige zusätzliche Informationen wie ein CAPTCHA bereitgestellt hat.

Um diesen Workflow zu ermöglichen, müssen wir zuerst die Seite zum Erstellen des Kontos aktualisieren, sodass neue Benutzer nicht genehmigt werden. Öffnen Sie die EnhancedCreateUserWizard.aspx Seite im Membership Ordner, und legen Sie die Eigenschaft des CreateUserWizard-Steuerelements DisableCreatedUser auf fest True.

Als Nächstes müssen wir das CreateUserWizard-Steuerelement so konfigurieren, dass eine E-Mail an den neuen Benutzer mit Anweisungen zum Überprüfen seines Kontos gesendet wird. Insbesondere fügen wir einen Link in die E-Mail zur Verification.aspx Seite ein (die wir noch erstellen müssen) und übergeben den neuen Benutzer UserId über die Abfragezeichenfolge. Auf Verification.aspx der Seite wird der angegebene Benutzer gesucht und als genehmigt markiert.

Senden einer überprüfungs-Email an neue Benutzer

Um eine E-Mail über das CreateUserWizard-Steuerelement zu senden, konfigurieren Sie dessen MailDefinition Eigenschaft entsprechend. Wie im vorherigen Tutorial erläutert, enthalten die Steuerelemente ChangePassword und PasswordRecovery eine MailDefinition -Eigenschaft , die auf die gleiche Weise wie das CreateUserWizard-Steuerelement funktioniert.

Hinweis

Um die MailDefinition -Eigenschaft zu verwenden, müssen Sie E-Mail-Übermittlungsoptionen in Web.configangeben. Weitere Informationen finden Sie unter Senden von Email 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!

Legen Sie die MailDefinitionEigenschaft von BodyFileName auf "~/EmailTemplates/CreateUserWizard.txt" und die - Subject Eigenschaft auf "Willkommen auf 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. CreateUserWizard ersetzt automatisch die <%UserName%> Platzhalter und <%Password%> durch den Benutzernamen und das Kennwort des neuen Kontos, es gibt jedoch keinen integrierten <%VerificationUrl%> Platzhalter. Sie müssen manuell durch die entsprechende Überprüfungs-URL ersetzt werden.

Erstellen Sie dazu einen Ereignishandler für das CreateUserWizard-EreignisSendingMail, und fügen Sie den folgenden Code hinzu:

Protected Sub NewUserWizard_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles NewUserWizard.SendingMail
     'Get the UserId of the just-added user
     Dim newUser As MembershipUser = Membership.GetUser(NewUserWizard.UserName)
     Dim newUserId As Guid = CType(newUser.ProviderUserKey, Guid)

     ' Determine the full verification URL (i.e., http://yoursite.com/Verification.aspx?ID=...)
     Dim urlBase As String = Request.Url.GetLeftPart(UriPartial.Authority) & Request.ApplicationPath
     Dim verifyUrl As String = "/Verification.aspx?ID=" + newUserId.ToString()
     Dim fullUrl As String = urlBase & verifyUrl

     ' Replace <%VerificationUrl%> with the appropriate URL and querystring

     e.Message.Body = e.Message.Body.Replace("<%VerificationUrl%>", fullUrl)
End Sub

Das SendingMail Ereignis wird nach dem CreatedUser Ereignis ausgelöst. Dies bedeutet, dass das neue Benutzerkonto bereits erstellt wurde, wenn der obige Ereignishandler ausgeführt wird. Wir können auf den Wert des UserId neuen Benutzers zugreifen, indem wir die Membership.GetUser -Methode aufrufen und das UserName in das CreateUserWizard-Steuerelement eingegebene ü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 gerootet 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. Schließlich enthält der E-Mail-Nachrichtentext (e.Message.Body) 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. Außerdem erhalten sie automatisch eine E-Mail mit einem Link zur Überprüfungs-URL (siehe Abbildung 6).

Der neue Benutzer erhält eine Email mit einem Link zur Überprüfungs-URL.

Abbildung 6: Der neue Benutzer empfängt eine Email mit einem Link zur Überprüfungs-URL (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Hinweis

Der Standardschritt CreateUserWizard des CreateUserWizard-Steuerelements zeigt eine Meldung an, die den Benutzer darüber informiert, dass sein Konto erstellt wurde, und zeigt eine Schaltfläche Weiter an. Durch Klicken auf diese Option wird der Benutzer zur URL gelangen, die durch die -Eigenschaft des Steuerelements ContinueDestinationPageUrl angegeben ist. CreateUserWizard in EnhancedCreateUserWizard.aspx ist so konfiguriert, dass neue Benutzer an die ~/Membership/AdditionalUserInfo.aspxgesendet werden, die den Benutzer zur Eingabe ihrer Heimatstadt, homepage-URL und 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 zur 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 ihm eine Überprüfungs-E-Mail gesendet wurde und sein Konto erst aktiviert wird, wenn er den Anweisungen in dieser E-Mail folgt. Ich belasse diese Änderungen als Übung für den Leser.

Erstellen der Seite "Überprüfung"

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 seite master. Wie bei den meisten vorherigen Inhaltsseiten, die der Website hinzugefügt wurden, entfernen Sie das Inhaltssteuerelement, das auf den LoginContent ContentPlaceHolder verweist, damit die Inhaltsseite den Standardinhalt der master Seite verwendet.

Fügen Sie der Verification.aspx Seite ein Label Web-Steuerelement hinzu, legen Sie auf fest IDStatusMessage , und löschen Sie dessen Texteigenschaft. Erstellen Sie als Nächstes den Page_Load Ereignishandler, und fügen Sie den folgenden Code hinzu:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     If String.IsNullOrEmpty(Request.QueryString("ID")) Then
          StatusMessage.Text = "The UserId was not included in the querystring..."
     Else
          Dim userId As Guid
          Try
               userId = New Guid(Request.QueryString("ID"))
          Catch
               StatusMessage.Text = "The UserId passed into the querystring is not in the proper format..."

               Exit Sub
          End Try

          Dim usr As MembershipUser = Membership.GetUser(userId)
          If usr Is Nothing Then
               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."

          End If
     End If
End Sub

Der Großteil des obigen Codes überprüft, ob die über die Abfragezeichenfolge bereitgestellte UserId vorhanden ist, ob es sich um einen gültigen Guid Wert handelt und ob sie auf ein vorhandenes Benutzerkonto verweist. Wenn alle diese Überprüfungen erfolgreich sind, wird das Benutzerkonto genehmigt. Andernfalls wird eine geeignete status Meldung angezeigt.

Abbildung 7 zeigt die Seite, wenn sie Verification.aspx über einen Browser aufgerufen wird.

Das neue Benutzerkonto ist jetzt genehmigt.

Abbildung 7: Das neue Benutzerkonto ist jetzt genehmigt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Zusammenfassung

Alle Mitgliedschaftsbenutzerkonten weisen zwei Status auf, die bestimmen, ob sich der Benutzer bei der Website anmelden kann: IsLockedOut und IsApproved. Beide Eigenschaften müssen für die Anmeldung durch den Benutzer verwendet werden True .

Die gesperrte status 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 Begrenzungen können über die Einstellungen des Mitgliedschaftsanbieters in Web.configkonfiguriert werden.

Die genehmigte status wird häufig 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.

Viel Spaß beim Programmieren!

Zum Autor

Scott Mitchell, Autor mehrerer ASP/ASP.NET-Bücher und Gründer von 4GuysFromRolla.com, arbeitet seit 1998 mit Microsoft-Webtechnologien. Scott arbeitet als unabhängiger Berater, Trainer und Autor. Sein neuestes Buch ist Sams Teach Yourself ASP.NET 2.0 in 24 Stunden. Scott kann unter mitchell@4guysfromrolla.com oder über seinen Blog unter http://ScottOnWriting.NETerreicht werden.

Besonderen Dank an...

Diese Tutorialreihe wurde von vielen hilfreichen Prüfern überprüft. Möchten Sie meine anstehenden MSDN-Artikel lesen? Wenn dies der Fall ist, legen Sie mir eine Zeile unter mitchell@4GuysFromRolla.com