Share via


Erstellen einer sicheren ASP.NET Web Forms-App mit Benutzerregistrierung, E-Mail-Bestätigung und Kennwortzurücksetzung (C#)

von Erik Reitan

In diesem Tutorial erfahren Sie, wie Sie eine ASP.NET Web Forms-App mit Benutzerregistrierung, E-Mail-Bestätigung und Kennwortzurücksetzung mithilfe des ASP.NET Identity-Mitgliedschaftssystems erstellen. Dieses Tutorial basiert auf dem MVC-Tutorial von Rick Anderson.

Einführung

Dieses Tutorial führt Sie durch die Schritte, die zum Erstellen einer ASP.NET Web Forms-Anwendung mit Visual Studio und ASP.NET 4.5 erforderlich sind, um eine sichere Web Forms-App mit Benutzerregistrierung, E-Mail-Bestätigung und Kennwortzurücksetzung zu erstellen.

Tutorialaufgaben und -informationen:

Erstellen einer ASP.NET Web Forms-App

Hinweis

Warnung: Sie müssen Visual Studio 2013 Update 3 oder höher installieren, um dieses Tutorial abzuschließen.

  1. Erstellen Sie ein neues Projekt (Datei –>Neues Projekt), und wählen Sie im Dialogfeld Neues Projekt die Vorlage ASP.NET Webanwendung und die neueste .NET Framework Version aus.

  2. Wählen Sie im Dialogfeld Neues ASP.NET Projekt die vorlage Web Forms aus. Behalten Sie die Standardauthentifizierung als Individuelle Benutzerkonten bei. Wenn Sie die App in Azure hosten möchten, lassen Sie das Kontrollkästchen Host in der Cloud aktiviert.
    Klicken Sie dann auf OK , um das neue Projekt zu erstellen.
    Dialogfeld

  3. Aktivieren Sie Secure Sockets Layer (SSL) für das Projekt. Führen Sie die Schritte aus, die im Abschnitt Aktivieren von SSL für das Projekt der Tutorialreihe Erste Schritte mit Web Forms verfügbar sind.

  4. Führen Sie die App aus, klicken Sie auf den Link Registrieren , und registrieren Sie einen neuen Benutzer. An diesem Punkt basiert die einzige Überprüfung der E-Mail auf dem [EmailAddress] -Attribut, um sicherzustellen, dass die E-Mail-Adresse wohlgeformt ist. Sie ändern den Code, um eine E-Mail-Bestätigung hinzuzufügen. Schließen Sie das Browserfenster.

  5. Navigieren Sie in Server Explorer von Visual Studio (Ansicht ->Server Explorer) zu Datenverbindungen\DefaultConnection\Tables\AspNetUsers, klicken Sie mit der rechten Maustaste, und wählen Sie Tabellendefinition öffnen aus.

    Die folgende Abbildung zeigt das AspNetUsers Tabellenschema:

    AspNetUsers-Tabellenschema

  6. Klicken Sie in Server Explorer mit der rechten Maustaste auf die Tabelle AspNetUsers, und wählen Sie Tabellendaten anzeigen aus.

    AspNetUsers-Tabellendaten
    Die E-Mail für den registrierten Benutzer wurde zu diesem Zeitpunkt noch nicht bestätigt.

  7. Klicken Sie auf die Zeile, und wählen Sie Löschen aus, um den Benutzer zu löschen. Sie fügen diese E-Mail im nächsten Schritt erneut hinzu und senden eine Bestätigungsnachricht an die E-Mail-Adresse.

Email Bestätigung

Es ist eine bewährte Methode, die E-Mail während der Registrierung eines neuen Benutzers zu bestätigen, um zu überprüfen, ob er sich nicht als eine andere Person ausgibt (d. a. er hat sich nicht bei der E-Mail einer anderen Person registriert). Angenommen, Sie hätten ein Diskussionsforum, sie sollten verhindern "bob@cpandl.com" , dass Sie sich als "joe@contoso.com"registrieren. Ohne E-Mail-Bestätigung "joe@contoso.com" kann unerwünschte E-Mails von Ihrer App erhalten. Angenommen, Bob hat sich versehentlich als "bib@cpandl.com" registriert und hatte es nicht bemerkt, er wäre nicht in der Lage, die Kennwortwiederherstellung zu verwenden, da die App nicht über seine richtige E-Mail verfügt. Email Bestätigung bietet nur eingeschränkten Schutz vor Bots und bietet keinen Schutz vor bestimmten Spammern.

Sie möchten generell verhindern, dass neue Benutzer Daten auf Ihrer Website veröffentlichen, bevor sie entweder per E-Mail, einer SMS oder einem anderen Mechanismus bestätigt wurden. In den folgenden Abschnitten aktivieren wir die E-Mail-Bestätigung und ändern den Code, um zu verhindern, dass sich neu registrierte Benutzer anmelden, bis ihre E-Mail bestätigt wurde. In diesem Tutorial verwenden Sie den E-Mail-Dienst SendGrid.

SendGrid einbinden

SendGrid hat seine API geändert, seit dieses Tutorial geschrieben wurde. Aktuelle SendGrid-Anweisungen finden Sie unter SendGrid oder Aktivieren der Kontobestätigung und Kennwortwiederherstellung.

Obwohl in diesem Tutorial nur gezeigt wird, wie Sie E-Mail-Benachrichtigungen über SendGrid hinzufügen, können Sie E-Mails mithilfe von SMTP und anderen Mechanismen senden (siehe zusätzliche Ressourcen).

  1. Öffnen Sie in Visual Studio die Paket-Manager-Konsole (Tools ->NuGet Package Manager-Konsole>), und geben Sie den folgenden Befehl ein:
    Install-Package SendGrid

  2. Navigieren Sie zur Azure SendGrid-Registrierungsseite , und registrieren Sie sich für ein kostenloses SendGrid-Konto. Sie können sich auch direkt auf der SendGrid-Website für ein kostenloses SendGrid-Konto registrieren.

  3. Öffnen Sie in Projektmappen-Explorer die Datei IdentityConfig.cs im Ordner App_Start, und fügen Sie der Klasse zum Konfigurieren von SendGrid den folgenden gelb hervorgehobenen EmailService Code hinzu:

    public class EmailService : IIdentityMessageService
    {
       public async Task SendAsync(IdentityMessage message)
       {
         await configSendGridasync(message);
       }
    
       // Use NuGet to install SendGrid (Basic C# client lib) 
       private async Task configSendGridasync(IdentityMessage message)
       {
          var myMessage = new SendGridMessage();
          myMessage.AddTo(message.Destination);
          myMessage.From = new System.Net.Mail.MailAddress(
                              "Royce@contoso.com", "Royce Sellars (Contoso Admin)");
          myMessage.Subject = message.Subject;
          myMessage.Text = message.Body;
          myMessage.Html = message.Body;
    
          var credentials = new NetworkCredential(
                     ConfigurationManager.AppSettings["emailServiceUserName"],
                     ConfigurationManager.AppSettings["emailServicePassword"]
                     );
    
          // Create a Web transport for sending email.
          var transportWeb = new Web(credentials);
    
          // Send the email.
          if (transportWeb != null)
          {
             await transportWeb.DeliverAsync(myMessage);
          }
          else
          {
             Trace.TraceError("Failed to create Web transport.");
             await Task.FromResult(0);
          }
       }
    }
    
  4. Fügen Sie außerdem die folgenden using Anweisungen am Anfang der Datei IdentityConfig.cs hinzu:

    using SendGrid;
    using System.Net;
    using System.Configuration;
    using System.Diagnostics;
    
  5. Um dieses Beispiel einfach zu halten, speichern Sie die Werte des E-Mail-Dienstkontos im appSettings Abschnitt der web.config-Datei . Fügen Sie den folgenden gelb hervorgehobenen XML-Code der web.config-Datei im Stammverzeichnis Ihres Projekts hinzu:

    </connectionStrings>
       <appSettings>
          <add key="emailServiceUserName" value="[EmailServiceAccountUserName]" />
          <add key="emailServicePassword" value="[EmailServiceAccountPassword]" />
       </appSettings>
      <system.web>
    

    Warnung

    Sicherheit: Speichern Sie vertrauliche Daten niemals in Ihrem Quellcode. In diesem Beispiel werden das Konto und die Anmeldeinformationen im Abschnitt appSetting der Web.config-Datei gespeichert. In Azure können Sie diese Werte sicher auf der Registerkarte Konfigurieren im Azure-Portal speichern. Verwandte Informationen finden Sie im Thema von Rick Anderson mit dem Titel Bewährte Methoden für die Bereitstellung von Kennwörtern und anderen vertraulichen Daten in ASP.NET und Azure.

  6. Fügen Sie die Werte des E-Mail-Diensts hinzu, um Ihre SendGrid-Authentifizierungswerte (Benutzername und Kennwort) widerzuspiegeln, damit Sie erfolgreich E-Mails aus Ihrer App senden können. Verwenden Sie unbedingt den Namen Ihres SendGrid-Kontos und nicht die E-Mail-Adresse, die Sie SendGrid angegeben haben.

Aktivieren Email Bestätigung

Um die E-Mail-Bestätigung zu aktivieren, ändern Sie den Registrierungscode mit den folgenden Schritten.

  1. Öffnen Sie im Ordner Konto den CodeBehind Register.aspx.cs , und aktualisieren Sie die CreateUser_Click -Methode, um die folgenden hervorgehobenen Änderungen zu aktivieren:

    protected void CreateUser_Click(object sender, EventArgs e)
    {
        var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var user = new ApplicationUser() { UserName = Email.Text, Email = Email.Text };
        IdentityResult result = manager.Create(user, Password.Text);
        if (result.Succeeded)
        {
            // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
            string code = manager.GenerateEmailConfirmationToken(user.Id);
            string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);
            manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>.");
    
            IdentityHelper.SignIn(manager, user, isPersistent: false);
            IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
        }
        else 
        {
            ErrorMessage.Text = result.Errors.FirstOrDefault();
        }
    }
    
  2. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf Default.aspx, und wählen Sie Als Startseite festlegen aus.

  3. Führen Sie die App aus, indem Sie F5 drücken. Nachdem die Seite angezeigt wurde, klicken Sie auf den Link Registrieren , um die Seite Registrieren anzuzeigen.

  4. Geben Sie Ihre E-Mail-Adresse und Ihr Kennwort ein, und klicken Sie dann auf die Schaltfläche Registrieren , um eine E-Mail-Nachricht über SendGrid zu senden.
    Der aktuelle Status Ihres Projekts und Ihres Codes ermöglicht es dem Benutzer, sich anzumelden, nachdem er das Registrierungsformular ausgefüllt hat, auch wenn er sein Konto nicht bestätigt hat.

  5. Überprüfen Sie Ihr E-Mail-Konto, und klicken Sie auf den Link, um Ihre E-Mail zu bestätigen.
    Nachdem Sie das Registrierungsformular übermittelt haben, werden Sie angemeldet.
    Beispielwebsite – Angemeldet

Vor der Anmeldung Email Bestätigung anfordern

Obwohl Sie das E-Mail-Konto bestätigt haben, müssen Sie zu diesem Zeitpunkt nicht auf den Link in der Überprüfungs-E-Mail klicken, um vollständig angemeldet zu werden. Im folgenden Abschnitt ändern Sie den Code, der erfordert, dass neue Benutzer eine bestätigte E-Mail erhalten, bevor sie angemeldet (authentifiziert) werden.

  1. Aktualisieren Sie in Projektmappen-Explorer von Visual Studio das CreateUser_Click Ereignis im CodeBehind Register.aspx.cs im Ordner Konten mit den folgenden hervorgehobenen Änderungen:

    protected void CreateUser_Click(object sender, EventArgs e)
    {
        var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var user = new ApplicationUser() { UserName = Email.Text, Email = Email.Text };
        IdentityResult result = manager.Create(user, Password.Text);
        if (result.Succeeded)
        {
            // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
            string code = manager.GenerateEmailConfirmationToken(user.Id);
            string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);
            manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>.");
    
            if (user.EmailConfirmed)
            {
              IdentityHelper.SignIn(manager, user, isPersistent: false);
              IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
            } 
            else
            {
              ErrorMessage.Text = "An email has been sent to your account. Please view the email and confirm your account to complete the registration process.";
            }
        }
        else 
        {
            ErrorMessage.Text = result.Errors.FirstOrDefault();
        }
    }
    
  2. Aktualisieren Sie die LogIn -Methode im CodeBehind login.aspx.cs mit den folgenden hervorgehobenen Änderungen:

    protected void LogIn(object sender, EventArgs e)
    {
        if (IsValid)
        {
            // Validate the user password
            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
            var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();
    
            // Require the user to have a confirmed email before they can log on.
            var user = manager.FindByName(Email.Text);
            if (user != null)
            {
                if (!user.EmailConfirmed)
                {
                    FailureText.Text = "Invalid login attempt. You must have a confirmed email account.";
                    ErrorMessage.Visible = true;
                }
                else
                {
                    // This doen't count login failures towards account lockout
                    // To enable password failures to trigger lockout, change to shouldLockout: true
                    var result = signinManager.PasswordSignIn(Email.Text, Password.Text, RememberMe.Checked, shouldLockout: false);
    
                    switch (result)
                    {
                        case SignInStatus.Success:
                            IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
                            break;
                        case SignInStatus.LockedOut:
                            Response.Redirect("/Account/Lockout");
                            break;
                        case SignInStatus.RequiresVerification:
                            Response.Redirect(String.Format("/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}",
                                                        Request.QueryString["ReturnUrl"],
                                                        RememberMe.Checked),
                                          true);
                            break;
                        case SignInStatus.Failure:
                        default:
                            FailureText.Text = "Invalid login attempt";
                            ErrorMessage.Visible = true;
                            break;
                    }
                }
            }
        }          
    }
    

Ausführen der Anwendung

Nachdem Sie den Code implementiert haben, um zu überprüfen, ob die E-Mail-Adresse eines Benutzers bestätigt wurde, können Sie die Funktionalität sowohl auf der Seite Registrieren als auch auf der Anmeldeseite überprüfen.

  1. Löschen Sie alle Konten in der Tabelle AspNetUsers , die den E-Mail-Alias enthalten, den Sie testen möchten.
  2. Führen Sie die App (F5) aus, und vergewissern Sie sich, dass Sie sich erst als Benutzer registrieren können, wenn Sie Ihre E-Mail-Adresse bestätigt haben.
  3. Bevor Sie Ihr neues Konto über die soeben gesendete E-Mail bestätigen, versuchen Sie, sich mit dem neuen Konto anzumelden.
    Sie sehen, dass Sie sich nicht anmelden können und dass Sie über ein bestätigtes E-Mail-Konto verfügen müssen.
  4. Nachdem Sie Ihre E-Mail-Adresse bestätigt haben, melden Sie sich bei der App an.

Kennwortwiederherstellung und -zurücksetzen

  1. Entfernen Sie in Visual Studio die Kommentarzeichen aus der Forgot Methode im CodeBehind Forgot.aspx.cs im Ordner Konto , sodass die Methode wie folgt angezeigt wird:

    protected void Forgot(object sender, EventArgs e)
    {
        if (IsValid)
        {
            // Validate the user's email address
            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
            ApplicationUser user = manager.FindByName(Email.Text);
            if (user == null || !manager.IsEmailConfirmed(user.Id))
            {
                FailureText.Text = "The user either does not exist or is not confirmed.";
                ErrorMessage.Visible = true;
                return;
            }
            // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
            // Send email with the code and the redirect to reset password page
            string code = manager.GeneratePasswordResetToken(user.Id);
            string callbackUrl = IdentityHelper.GetResetPasswordRedirectUrl(code, Request);
            manager.SendEmail(user.Id, "Reset Password", "Please reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>.");
            loginForm.Visible = false;
            DisplayEmail.Visible = true;
        }
    }
    
  2. Öffnen Sie die Seite Login.aspx . Ersetzen Sie das Markup am Ende des abschnitts loginForm wie unten hervorgehoben:

    <%@ Page Title="Log in" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="WebForms002.Account.Login" Async="true" %>
    
    <%@ Register Src="~/Account/OpenAuthProviders.ascx" TagPrefix="uc" TagName="OpenAuthProviders" %>
    
    <asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
        <h2><%: Title %>.</h2>
    
        <div class="row">
            <div class="col-md-8">
                <section id="loginForm">
                    <div class="form-horizontal">
                        <h4>Use a local account to log in.</h4>
                        <hr />
                        <asp:PlaceHolder runat="server" ID="ErrorMessage" Visible="false">
                            <p class="text-danger">
                                <asp:Literal runat="server" ID="FailureText" />
                            </p>
                        </asp:PlaceHolder>
                        <div class="form-group">
                            <asp:Label runat="server" AssociatedControlID="Email" CssClass="col-md-2 control-label">Email</asp:Label>
                            <div class="col-md-10">
                                <asp:TextBox runat="server" ID="Email" CssClass="form-control" TextMode="Email" />
                                <asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
                                    CssClass="text-danger" ErrorMessage="The email field is required." />
                            </div>
                        </div>
                        <div class="form-group">
                            <asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-2 control-label">Password</asp:Label>
                            <div class="col-md-10">
                                <asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
                                <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" CssClass="text-danger" ErrorMessage="The password field is required." />
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-md-offset-2 col-md-10">
                                <div class="checkbox">
                                    <asp:CheckBox runat="server" ID="RememberMe" />
                                    <asp:Label runat="server" AssociatedControlID="RememberMe">Remember me?</asp:Label>
                                </div>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-md-offset-2 col-md-10">
                                <asp:Button runat="server" OnClick="LogIn" Text="Log in" CssClass="btn btn-default" />
                            </div>
                        </div>
                    </div>
                    <p>
                        <asp:HyperLink runat="server" ID="RegisterHyperLink" ViewStateMode="Disabled">Register as a new user</asp:HyperLink>
                    </p>
                    <p>
                        <%-- Enable this once you have account confirmation enabled for password reset functionality --%>
                        <asp:HyperLink runat="server" ID="ForgotPasswordHyperLink" ViewStateMode="Disabled">Forgot your password?</asp:HyperLink>
                    </p>
                </section>
            </div>
    
            <div class="col-md-4">
                <section id="socialLoginForm">
                    <uc:OpenAuthProviders runat="server" ID="OpenAuthLogin" />
                </section>
            </div>
        </div>
    </asp:Content>
    
  3. Öffnen Sie den CodeBehind Login.aspx.cs , und heben Sie die Auskommentierung der folgenden codezeile auf, die aus dem Page_Load Ereignishandler gelb hervorgehoben ist:

    protected void Page_Load(object sender, EventArgs e)
    {
        RegisterHyperLink.NavigateUrl = "Register";
        // Enable this once you have account confirmation enabled for password reset functionality
        ForgotPasswordHyperLink.NavigateUrl = "Forgot";
        OpenAuthLogin.ReturnUrl = Request.QueryString["ReturnUrl"];
        var returnUrl = HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]);
        if (!String.IsNullOrEmpty(returnUrl))
        {
            RegisterHyperLink.NavigateUrl += "?ReturnUrl=" + returnUrl;
        }
    }
    
  4. Führen Sie die App aus, indem Sie F5 drücken. Nachdem die Seite angezeigt wurde, klicken Sie auf den Link Anmelden .

  5. Klicken Sie auf den Link Kennwort vergessen? , um die Seite Kennwort vergessen anzuzeigen.

  6. Geben Sie Ihre E-Mail-Adresse ein, und klicken Sie auf die Schaltfläche Senden , um eine E-Mail an Ihre Adresse zu senden, mit der Sie Ihr Kennwort zurücksetzen können.
    Überprüfen Sie Ihr E-Mail-Konto, und klicken Sie auf den Link, um die Seite Kennwort zurücksetzen anzuzeigen.

  7. Geben Sie auf der Seite Kennwort zurücksetzen Ihre E-Mail-Adresse, Ihr Kennwort und ihr bestätigtes Kennwort ein. Drücken Sie dann die Schaltfläche Zurücksetzen .
    Wenn Sie Ihr Kennwort erfolgreich zurückgesetzt haben, wird die Seite Kennwort geändert angezeigt. Jetzt können Sie sich mit Ihrem neuen Kennwort anmelden.

Sobald ein Benutzer ein neues lokales Konto erstellt hat, wird ein Bestätigungslink per E-Mail gesendet, den er verwenden muss, bevor er sich anmelden kann. Wenn der Benutzer versehentlich die Bestätigungs-E-Mail löscht oder die E-Mail nie eintrifft, muss der Bestätigungslink erneut gesendet werden. Die folgenden Codeänderungen zeigen, wie Sie dies aktivieren.

  1. Öffnen Sie in Visual Studio das CodeBehind Login.aspx.cs , und fügen Sie den folgenden Ereignishandler nach dem LogIn Ereignishandler hinzu:

    protected void SendEmailConfirmationToken(object sender, EventArgs e)
    {
        var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var user = manager.FindByName(Email.Text);
        if (user != null)
        {
            if (!user.EmailConfirmed)
            {
                string code = manager.GenerateEmailConfirmationToken(user.Id);
                string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);
                manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>.");
    
                FailureText.Text = "Confirmation email sent. Please view the email and confirm your account.";
                ErrorMessage.Visible = true;
                ResendConfirm.Visible = false;
            }
        }
    }
    
  2. Ändern Sie den LogIn Ereignishandler im CodeBehind Login.aspx.cs , indem Sie den gelb hervorgehobenen Code wie folgt ändern:

    protected void LogIn(object sender, EventArgs e)
    {
        if (IsValid)
        {
            // Validate the user password
            var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
            var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();
    
            // Require the user to have a confirmed email before they can log on.
            var user = manager.FindByName(Email.Text);
            if (user != null)
            {
                if (!user.EmailConfirmed)
                {
                    FailureText.Text = "Invalid login attempt. You must have a confirmed email address. Enter your email and password, then press 'Resend Confirmation'.";
                    ErrorMessage.Visible = true;
                    ResendConfirm.Visible = true;
                }
                else
                {
                    // This doen't count login failures towards account lockout
                    // To enable password failures to trigger lockout, change to shouldLockout: true
                    var result = signinManager.PasswordSignIn(Email.Text, Password.Text, RememberMe.Checked, shouldLockout: false);
    
                    switch (result)
                    {
                        case SignInStatus.Success:
                            IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
                            break;
                        case SignInStatus.LockedOut:
                            Response.Redirect("/Account/Lockout");
                            break;
                        case SignInStatus.RequiresVerification:
                            Response.Redirect(String.Format("/Account/TwoFactorAuthenticationSignIn?ReturnUrl={0}&RememberMe={1}",
                                                        Request.QueryString["ReturnUrl"],
                                                        RememberMe.Checked),
                                          true);
                            break;
                        case SignInStatus.Failure:
                        default:
                            FailureText.Text = "Invalid login attempt";
                            ErrorMessage.Visible = true;
                            break;
                    }
                }
            }
        }
    }
    
  3. Aktualisieren Sie die Seite Login.aspx , indem Sie den gelb hervorgehobenen Code wie folgt hinzufügen:

    <%@ Page Title="Log in" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="WebForms002.Account.Login" Async="true" %>
    
    <%@ Register Src="~/Account/OpenAuthProviders.ascx" TagPrefix="uc" TagName="OpenAuthProviders" %>
    
    <asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
        <h2><%: Title %>.</h2>
    
        <div class="row">
            <div class="col-md-8">
                <section id="loginForm">
                    <div class="form-horizontal">
                        <h4>Use a local account to log in.</h4>
                        <hr />
                        <asp:PlaceHolder runat="server" ID="ErrorMessage" Visible="false">
                            <p class="text-danger">
                                <asp:Literal runat="server" ID="FailureText" />
                            </p>
                        </asp:PlaceHolder>
                        <div class="form-group">
                            <asp:Label runat="server" AssociatedControlID="Email" CssClass="col-md-2 control-label">Email</asp:Label>
                            <div class="col-md-10">
                                <asp:TextBox runat="server" ID="Email" CssClass="form-control" TextMode="Email" />
                                <asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
                                    CssClass="text-danger" ErrorMessage="The email field is required." />
                            </div>
                        </div>
                        <div class="form-group">
                            <asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-2 control-label">Password</asp:Label>
                            <div class="col-md-10">
                                <asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
                                <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" CssClass="text-danger" ErrorMessage="The password field is required." />
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-md-offset-2 col-md-10">
                                <div class="checkbox">
                                    <asp:CheckBox runat="server" ID="RememberMe" />
                                    <asp:Label runat="server" AssociatedControlID="RememberMe">Remember me?</asp:Label>
                                </div>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-md-offset-2 col-md-10">
                                <asp:Button runat="server" OnClick="LogIn" Text="Log in" CssClass="btn btn-default" />
                                &nbsp;&nbsp;
                                <asp:Button runat="server" ID="ResendConfirm"  OnClick="SendEmailConfirmationToken" Text="Resend confirmation" Visible="false" CssClass="btn btn-default" />
                            </div>
                        </div>
                    </div>
                    <p>
                        <asp:HyperLink runat="server" ID="RegisterHyperLink" ViewStateMode="Disabled">Register as a new user</asp:HyperLink>
                    </p>
                    <p>
                        <%-- Enable this once you have account confirmation enabled for password reset functionality --%>
                        <asp:HyperLink runat="server" ID="ForgotPasswordHyperLink" ViewStateMode="Disabled">Forgot your password?</asp:HyperLink>
                    </p>
                </section>
            </div>
    
            <div class="col-md-4">
                <section id="socialLoginForm">
                    <uc:OpenAuthProviders runat="server" ID="OpenAuthLogin" />
                </section>
            </div>
        </div>
    </asp:Content>
    
  4. Löschen Sie alle Konten in der Tabelle AspNetUsers , die den E-Mail-Alias enthalten, den Sie testen möchten.

  5. Führen Sie die App (F5) aus, und registrieren Sie Ihre E-Mail-Adresse.

  6. Bevor Sie Ihr neues Konto über die soeben gesendete E-Mail bestätigen, versuchen Sie, sich mit dem neuen Konto anzumelden.
    Sie werden sehen, dass Sie sich nicht anmelden können und dass Sie über ein bestätigtes E-Mail-Konto verfügen müssen. Darüber hinaus können Sie jetzt eine Bestätigungsnachricht erneut an Ihr E-Mail-Konto senden.

  7. Geben Sie Ihre E-Mail-Adresse und Ihr Kennwort ein, und drücken Sie dann die Bestätigungsschaltfläche Erneut senden .

  8. Nachdem Sie Ihre E-Mail-Adresse basierend auf der neu gesendeten E-Mail-Nachricht bestätigt haben, melden Sie sich bei der App an.

Problembehandlung für die App

Wenn Sie keine E-Mail mit dem Link zum Überprüfen Ihrer Anmeldeinformationen erhalten:

  • Überprüfen Sie Ihren Junk- oder Spamordner.
  • Melden Sie sich bei Ihrem SendGrid-Konto an, und klicken Sie auf den Link Email Aktivität.
  • Stellen Sie sicher, dass Sie den Namen Ihres SendGrid-Benutzerkontos als Web.config Wert anstelle der E-Mail-Adresse Ihres SendGrid-Kontos verwendet haben.

Zusätzliche Ressourcen