Condividi tramite


Creare un'app Web Forms ASP.NET sicura con registrazione utente, messaggi di posta elettronica di conferma e reimpostazione della password (C#)

di Erik Reitan

Questa esercitazione illustra come creare un'app Web Forms ASP.NET con registrazione utente, conferma e reimpostazione della password tramite il ASP.NET sistema di appartenenza alle identità. Questa esercitazione è basata sull'esercitazione MVC di Rick Anderson.

Introduzione

Questa esercitazione illustra i passaggi necessari per creare un'applicazione Web Forms ASP.NET usando Visual Studio e ASP.NET 4.5 per creare un'app di Web Forms sicura con registrazione utente, conferma della posta elettronica e reimpostazione della password.

Attività e informazioni dell'esercitazione:

Creare un'app Web Forms ASP.NET

Nota

Avviso: è necessario installare Visual Studio 2013 Aggiornamento 3 o versione successiva per completare questa esercitazione.

  1. Creare un nuovo progetto (File ->Nuovo progetto) e selezionare il modello di applicazione Web ASP.NET e la versione più recente di .NET Framework dalla finestra di dialogo Nuovo progetto .

  2. Nella finestra di dialogo Nuovo ASP.NET progetto selezionare il modello di Web Forms. Lasciare l'autenticazione predefinita come singoli account utente. Se si vuole ospitare l'app in Azure, lasciare selezionata la casella di controllo Host nel cloud .
    Fare quindi clic su OK per creare il nuovo progetto.
    Finestra di dialogo Nuovo progetto ASP.NET

  3. Abilitare Secure Sockets Layer (SSL) per il progetto. Seguire i passaggi disponibili nella sezione Abilita SSL per il progetto della Introduzione con Web Forms serie di esercitazioni.

  4. Eseguire l'app, fare clic sul collegamento Registra e registrare un nuovo utente. A questo punto, l'unica convalida sul messaggio di posta elettronica è basata sull'attributo [EmailAddress] per assicurarsi che l'indirizzo di posta elettronica sia ben formato. Il codice verrà modificato per aggiungere la conferma di posta elettronica. Chiudere la finestra del browser.

  5. In Esplora server di Visual Studio (Visualizza ->Server Explorer), passare a Connessioni dati\DefaultConnection\Tables\AspNetUsers, fare clic con il pulsante destro del mouse e selezionare Apri definizione tabella.

    L'immagine seguente mostra lo schema della AspNetUsers tabella:

    Schema di tabella AspNetUsers

  6. In Esplora server fare clic con il pulsante destro del mouse sulla tabella AspNetUsers e selezionare Mostra dati tabella.

    Dati di tabella aspNetUsers
    A questo punto il messaggio di posta elettronica per l'utente registrato non è stato confermato.

  7. Fare clic sulla riga e selezionare Elimina per eliminare l'utente. Questo messaggio di posta elettronica verrà aggiunto di nuovo nel passaggio successivo e verrà inviato un messaggio di conferma all'indirizzo di posta elettronica.

Email conferma

È consigliabile confermare il messaggio di posta elettronica durante la registrazione di un nuovo utente per verificare che non siano rappresentazioni di un altro utente, ovvero non sono state registrate con un messaggio di posta elettronica di un altro utente. Si supponga di avere un forum di discussione, si vuole impedire "bob@cpandl.com" la registrazione come "joe@contoso.com". Senza conferma di posta elettronica, "joe@contoso.com" potrebbe ricevere un messaggio di posta elettronica indesiderato dall'app. Si supponga che Bob abbia registrato accidentalmente come "bib@cpandl.com" e non lo avesse notato, non sarebbe in grado di usare il ripristino della password perché l'app non ha il suo messaggio di posta elettronica corretto. Email conferma offre solo una protezione limitata dai bot e non fornisce protezione da spammer determinati.

In genere si vuole impedire ai nuovi utenti di pubblicare dati nel sito Web prima che siano stati confermati tramite posta elettronica, un messaggio di testo SMS o un altro meccanismo. Nelle sezioni seguenti verrà abilitata la conferma tramite posta elettronica e si modifica il codice per impedire agli utenti appena registrati di accedere fino a quando il messaggio di posta elettronica non è stato confermato. In questa esercitazione si userà il servizio di posta elettronica SendGrid.

Collegare SendGrid

SendGrid ha modificato l'API perché questa esercitazione è stata scritta. Per le istruzioni di SendGrid correnti, vedere SendGrid o Abilita conferma dell'account e ripristino della password.

Anche se questa esercitazione illustra solo come aggiungere notifiche di posta elettronica tramite SendGrid, è possibile inviare messaggi di posta elettronica usando SMTP e altri meccanismi (vedere altre risorse).

  1. In Visual Studio aprire la console di Gestione pacchetti (Strumenti -NuGet Package Manger ->>Package Manager Console) e immettere il comando seguente:
    Install-Package SendGrid

  2. Passare alla pagina di iscrizione di Azure SendGrid e registrarsi gratuitamente all'account SendGrid. È anche possibile iscriversi per un account SendGrid gratuito direttamente nel sito di SendGrid.

  3. Da Esplora soluzioni aprire il file IdentityConfig.cs nella cartella App_Start e aggiungere il codice seguente evidenziato in giallo alla EmailService classe per configurare SendGrid:

    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. Aggiungere anche le istruzioni seguenti using all'inizio del file IdentityConfig.cs :

    using SendGrid;
    using System.Net;
    using System.Configuration;
    using System.Diagnostics;
    
  5. Per mantenere questo esempio semplice, verranno archiviati i valori dell'account del servizio di posta elettronica nella appSettings sezione del file web.config . Aggiungere il codice XML seguente evidenziato in giallo al file web.config nella radice del progetto:

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

    Avviso

    Sicurezza: non archiviare mai i dati sensibili nel codice sorgente. In questo esempio l'account e le credenziali vengono archiviati nella sezione appSetting del file diWeb.config . In Azure è possibile archiviare questi valori in modo sicuro nella scheda Configura nella portale di Azure. Per informazioni correlate, vedere l'argomento di Rick Anderson intitolato Procedure consigliate per la distribuzione di password e altri dati sensibili in ASP.NET e Azure.

  6. Aggiungere i valori del servizio di posta elettronica per riflettere i valori di autenticazione sendGrid (Nome utente e password) in modo da poter inviare correttamente un messaggio di posta elettronica dall'app. Assicurarsi di usare il nome dell'account SendGrid anziché l'indirizzo di posta elettronica specificato da SendGrid.

Abilitare Email conferma

Per abilitare la conferma tramite posta elettronica, si modificherà il codice di registrazione seguendo questa procedura.

  1. Nella cartella Account aprire il code-behind Register.aspx.cs e aggiornare il CreateUser_Click metodo per abilitare le modifiche evidenziate seguenti:

    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. In Esplora soluzioni fare clic con il pulsante destro del mouse su Default.aspx e scegliere Imposta come pagina iniziale.

  3. Eseguire l'app premendo F5. Dopo aver visualizzato la pagina, fare clic sul collegamento Registra per visualizzare la pagina Registra .

  4. Immettere la posta elettronica e la password, quindi fare clic sul pulsante Registra per inviare un messaggio di posta elettronica tramite SendGrid.
    Lo stato corrente del progetto e del codice consentirà all'utente di accedere dopo aver completato il modulo di registrazione, anche se non hanno confermato il proprio account.

  5. Controllare l'account di posta elettronica e fare clic sul collegamento per confermare il messaggio di posta elettronica.
    Dopo aver inviato il modulo di registrazione, verrà eseguito l'accesso.
    Sito Web di esempio - Accesso

Richiedi Email conferma prima dell'accesso

Anche se l'account di posta elettronica è stato confermato, a questo punto non è necessario fare clic sul collegamento contenuto nel messaggio di posta elettronica di verifica per l'accesso completo. Nella sezione seguente verrà modificato il codice che richiede agli utenti di avere un messaggio di posta elettronica confermato prima di essere connessi (autenticato).

  1. In Esplora soluzioni di Visual Studio aggiornare l'evento CreateUser_Click nel code-behind Register.aspx.cs contenuto nella cartella Account con le modifiche evidenziate seguenti:

    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. Aggiornare il LogIn metodo nel codice Login.aspx.cs con le modifiche evidenziate seguenti:

    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;
                    }
                }
            }
        }          
    }
    

Eseguire l'applicazione

Dopo aver implementato il codice per verificare se è stato confermato l'indirizzo di posta elettronica di un utente, è possibile controllare la funzionalità nelle pagine Registra e Login .

  1. Eliminare tutti gli account nella tabella AspNetUsers che contengono l'alias di posta elettronica da testare.
  2. Eseguire l'app (F5) e verificare che non sia possibile registrare come utente fino a quando non è stato confermato l'indirizzo di posta elettronica.
  3. Prima di confermare il nuovo account tramite il messaggio di posta elettronica appena inviato, tentare di accedere con il nuovo account.
    Si noterà che non è possibile accedere e che è necessario avere un account di posta elettronica confermato.
  4. Dopo aver confermato l'indirizzo di posta elettronica, accedere all'app.

Ripristino e reimpostazione delle password

  1. In Visual Studio rimuovere i caratteri di commento dal Forgot metodo nel code-behind Forgot.aspx.cs contenuto nella cartella Account , in modo che il metodo venga visualizzato come indicato di seguito:

    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. Aprire la pagina Login.aspx . Sostituire il markup vicino alla fine della sezione loginForm come evidenziato di seguito:

    <%@ 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. Aprire il code-behind login.aspx.cs e annullare ilcommentamento della riga di codice seguente evidenziata in giallo dal Page_Load gestore eventi:

    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. Eseguire l'app premendo F5. Dopo aver visualizzato la pagina, fare clic sul collegamento Accedi .

  5. Fare clic sul collegamento Password dimenticata? per visualizzare la pagina Password dimenticata .

  6. Immettere l'indirizzo di posta elettronica e fare clic sul pulsante Invia per inviare un messaggio di posta elettronica all'indirizzo che consente di reimpostare la password.
    Controllare l'account di posta elettronica e fare clic sul collegamento per visualizzare la pagina Reimposta password .

  7. Nella pagina Reimposta password immettere il messaggio di posta elettronica, la password e la password confermata. Premere quindi il pulsante Reimposta .
    Quando la password viene reimpostata correttamente, verrà visualizzata la pagina Password modificata . È ora possibile accedere con la nuova password.

Dopo che un utente crea un nuovo account locale, viene inviato un messaggio di posta elettronica a un collegamento di conferma da usare prima di poter accedere. Se l'utente elimina accidentalmente il messaggio di posta elettronica di conferma o il messaggio di posta elettronica non arriva mai, sarà necessario il collegamento di conferma inviato di nuovo. Le modifiche al codice seguenti illustrano come abilitare questa operazione.

  1. In Visual Studio aprire il code-behind Login.aspx.cs e aggiungere il gestore eventi seguente dopo il LogIn gestore eventi:

    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. Modificare il LogIn gestore eventi nel code-behind Login.aspx.cs modificando il codice evidenziato in giallo come indicato di seguito:

    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. Aggiornare la pagina Login.aspx aggiungendo il codice evidenziato in giallo come indicato di seguito:

    <%@ 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. Eliminare tutti gli account nella tabella AspNetUsers che contengono l'alias di posta elettronica da testare.

  5. Eseguire l'app (F5) e registrare l'indirizzo di posta elettronica.

  6. Prima di confermare il nuovo account tramite il messaggio di posta elettronica appena inviato, provare ad accedere con il nuovo account.
    Si noterà che non è possibile accedere e che è necessario avere un account di posta elettronica confermato. Inoltre, è ora possibile inviare nuovamente un messaggio di conferma all'account di posta elettronica.

  7. Immettere l'indirizzo di posta elettronica e la password, quindi premere il pulsante Conferma invio di nuovo .

  8. Dopo aver confermato l'indirizzo di posta elettronica in base al messaggio di posta elettronica appena inviato, accedere all'app.

Risoluzione dei problemi relativi all'app

Se non si riceve un messaggio di posta elettronica contenente il collegamento per verificare le credenziali:

  • Controllare la cartella della posta indesiderata o della posta indesiderata.
  • Accedere all'account SendGrid e fare clic sul collegamento Email Attività.
  • Assicurarsi di aver usato il nome dell'account utente di SendGrid come valore Web.config anziché l'indirizzo di posta elettronica dell'account SendGrid.

Risorse aggiuntive