E-Mail-Verifizierung bei neuen Usern

Wenn man mit dem Membership-Provider und den Controls „Login“ und „CreateUser“ u. a. eine Benutzerregistrieung in Asp.Net umsetzt, kann sich der User gleich nach dem Registrieren einloggen. Leider wird nicht überprüft, ob die E-Mail-Adresse wirklich die des Users ist.
Ziel ist daher, dass der User-Account gleich nach der Registrierung deaktiviert ist und erst durch einen Link in einem E-Mail aktiviert wird.

Account nach Anmeldung deaktivieren

Standardmäßig ist eingestellt, dass ein User-Account nach der Registrierung aktiv ist. Dies schalten wir einfach aus:
Wir setzen einfach die Property des CreateUser-Controls „DisableCreatedUser“ auf „True“.

Um den User zu informieren, ändern wir den Text in der Property „CompleteSuccessText“.

E-Mail erstellen

Zunächst muss man eine Datei anlegen, die den Quellcode für die E-Mail enthält. Diesen am besten als „EmailNewAccount.htm“ abspeichern (Zunächst eine leere HTM-Datei erstellen und den Quellcode in den Body-Teil einfügen):

 <p>
   Hello, <%UserName%>. You are receiving this email because you recently created a new account at my 
   site. Before you can login, however, you need to first visit the following link:
 </p>
 <p><a href="<%VerifyUrl%>"><%VerifyUrl%></a></p>

Die Variablen UserName wird autom. ersetzt, zum ersetzen der Variable VerifyUrl verwendet wir einen Ereignishandler des CreateUser-Objekts:

   Protected Sub CreateUserWizard1_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles CreateUserWizard1.SendingMail
       Dim userInfo As MembershipUser = Membership.GetUser(CreateUserWizard1.UserName)

       'Construct the verification URL
       Dim verifyUrl As String = Request.Url.GetLeftPart(UriPartial.Authority) & Page.ResolveUrl("~/Verify.aspx?ID=" & userInfo.ProviderUserKey.ToString())

       'Replace <%VerifyUrl%> placeholder with verifyUrl value
       e.Message.Body = e.Message.Body.Replace("<%VerifyUrl%>", verifyUrl)
   End Sub

E-Mail senden

Dies funktioniert mit der Property „MailDefinition“ inkl. allen Unterelementen des CrateUser-Elements.
Diese einfach auf die oben erstellte-HTM-Datei zeigen lassen, den Betreff und die Absenderadresse eingeben.

Wichtig ist, dass in der web.config die E-Mail-Server-Einstellungen eingetragen sind (siehe entsprechende Seite).

Erstellen der Website zur Verifikation

Nun benötigt man noch die Seite, die beim Übergeben der richtigen ID den User-Account freischaltet.
Dazu erstellt man eine Verify.aspx und fügt folgende Page_Load-Ereignisbehandlung ein:

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
       'Sicherstellen, dass ein QueryString übergeben wurde
       If String.IsNullOrEmpty(Request.QueryString("ID")) OrElse Not Regex.IsMatch(Request.QueryString("ID"), "0-9a-f{8}\-(0-9a-f{4}\-){3}0-9a-f{12}") Then
           InformationLabel.Text = "Es wurde kein gültiger Link übergeben."
       Else
           'Wenn die ID existiert, die ID einer Variablen zuweisen
           Dim userId As Guid = New Guid(Request.QueryString("ID"))

           'Info über den User erhalten
           Dim userInfo As MembershipUser = Membership.GetUser(userId)
           If userInfo Is Nothing Then
               'User nicht gefunden!
               InformationLabel.Text = "Kein Eintrag in der Datenbank gefunden."
           Else
               'User ist gültig, freischalten
               userInfo.IsApproved = True
               Membership.UpdateUser(userInfo)

               'Anzeigen einer Meldung
               InformationLabel.Text = "Ihr Account wurde aktiviert und Sie können sich nun einloggen."
           End If
       End If
   End Sub

Auf der Seite fügt man ein Label-Element mit dem Namen „InformationLabel“ ein, in dem die Statusmeldungen angezeigt werden.

Quellen

Anleitung in Englisch: http://www.4guysfromrolla.com/articles/062508-1.aspx

Senden von E-Mails mit Asp.Net: http://aspnet.4guysfromrolla.com/articles/072606-1.aspx

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne

Loading…
Avatar von manuel

AUTOR

manuel