Partilhar via


Criar um aplicativo de Web Forms do ASP.NET seguro com registro de usuário, confirmação por email e redefinição de senha (C#)

por Erik Reitan

Este tutorial mostra como criar um aplicativo ASP.NET Web Forms com registro de usuário, confirmação de email e redefinição de senha usando o sistema de associação de identidade do ASP.NET. Este tutorial foi baseado no tutorial do MVC de Rick Anderson.

Introdução

Este tutorial orienta você pelas etapas necessárias para criar um aplicativo ASP.NET Web Forms usando o Visual Studio e o ASP.NET 4.5 para criar um aplicativo de Web Forms seguro com registro de usuário, confirmação de email e redefinição de senha.

Tarefas e informações do tutorial:

Criar um aplicativo ASP.NET Web Forms

Observação

Aviso: você deve instalar Visual Studio 2013 Atualização 3 ou superior para concluir este tutorial.

  1. Crie um novo projeto (Arquivo ->Novo Projeto) e selecione o modelo ASP.NET Aplicativo Web e a versão mais recente do .NET Framework na caixa de diálogo Novo Projeto.

  2. Na caixa de diálogo Novo projeto ASP.NET, selecione o modelo de Web Forms. Deixe a autenticação padrão como Contas de Usuário Individuais. Se você quiser hospedar o aplicativo no Azure, deixe a caixa Host na nuvem marcar marcada.
    Em seguida, clique em OK para criar o novo projeto.
    Caixa de diálogo Novo Projeto ASP .NET

  3. Habilite a SSL (Secure Sockets Layer) para o projeto. Siga as etapas disponíveis na seção Habilitar SSL para o Projeto do Introdução com Web Forms série de tutoriais.

  4. Execute o aplicativo, clique no link Registrar e registre um novo usuário. Neste ponto, a única validação no email é baseada no atributo [EmailAddress] para garantir que o endereço de email esteja bem formado. Você modificará o código para adicionar confirmação por email. Feche a janela do navegador.

  5. Em Explorer do Servidor do Visual Studio (Exibir ->Server Explorer), navegue até Conexões de Dados\DefaultConnection\Tables\AspNetUsers, clique com o botão direito do mouse e selecione Abrir definição de tabela.

    A imagem a seguir mostra o esquema da AspNetUsers tabela:

    Esquema de tabela AspNetUsers

  6. Em Servidor Explorer, clique com o botão direito do mouse na tabela AspNetUsers e selecione Mostrar Dados da Tabela.

    Dados da tabela AspNetUsers
    Neste ponto, o email para o usuário registrado não foi confirmado.

  7. Clique na linha e selecione excluir para excluir o usuário. Você adicionará esse email novamente na próxima etapa e enviará uma mensagem de confirmação para o endereço de email.

Confirmação do Email

É uma prática recomendada confirmar o email durante o registro de um novo usuário para verificar se ele não está se passando por outra pessoa (ou seja, ele não se registrou com o email de outra pessoa). Suponha que você teve um fórum de discussão, você gostaria de impedir "bob@cpandl.com" de se registrar como "joe@contoso.com". Sem confirmação por email, "joe@contoso.com" o pode receber emails indesejados do seu aplicativo. Suponha que Bob se registrou acidentalmente como "bib@cpandl.com" e não tivesse notado, ele não seria capaz de usar a recuperação de senha porque o aplicativo não tem seu email correto. Email confirmação fornece apenas proteção limitada contra bots e não fornece proteção contra spammers determinados.

Geralmente, você deseja impedir que novos usuários postem dados em seu site antes que eles sejam confirmados por email, uma mensagem de texto SMS ou outro mecanismo. Nas seções abaixo, habilitaremos a confirmação por email e modificaremos o código para impedir que usuários recém-registrados entrem até que seus emails sejam confirmados. Você usará o serviço de email SendGrid neste tutorial.

Conectar o SendGrid

O SendGrid alterou sua API desde que este tutorial foi escrito. Para obter instruções atuais do SendGrid, consulte SendGrid ou Habilitar confirmação de conta e recuperação de senha.

Embora este tutorial mostre apenas como adicionar notificação por email por meio do SendGrid, você pode enviar emails usando SMTP e outros mecanismos (consulte recursos adicionais).

  1. No Visual Studio, abra o Console do Gerenciador de Pacotes (Ferramentas ->Gerenciador de Pacotes NuGet ->Console do Gerenciador de Pacotes) e insira o seguinte comando:
    Install-Package SendGrid

  2. Acesse a página de inscrição do Azure SendGrid e registre-se para obter uma conta gratuita do SendGrid. Você também pode se inscrever para uma conta gratuita do SendGrid diretamente no site do SendGrid.

  3. No Gerenciador de Soluções abra o arquivo IdentityConfig.cs na pasta App_Start e adicione o seguinte código realçado em amarelo à classe para configurar o EmailServiceSendGrid:

    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. Além disso, adicione as seguintes using instruções ao início do arquivo IdentityConfig.cs :

    using SendGrid;
    using System.Net;
    using System.Configuration;
    using System.Diagnostics;
    
  5. Para manter este exemplo simples, você armazenará os valores da conta de serviço de email na appSettings seção do arquivo web.config . Adicione o seguinte XML realçado em amarelo ao arquivo web.config na raiz do projeto:

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

    Aviso

    Segurança – Nunca armazene dados confidenciais em seu código-fonte. Neste exemplo, a conta e as credenciais são armazenadas na seção appSetting do arquivo Web.config . No Azure, você pode armazenar com segurança esses valores na guia Configurar no portal do Azure. Para obter informações relacionadas, consulte o tópico de Rick Anderson intitulado Práticas recomendadas para implantar senhas e outros dados confidenciais no ASP.NET e no Azure.

  6. Adicione os valores do serviço de email para refletir os valores de autenticação do SendGrid (Nome de Usuário e Senha) para que você possa enviar emails com êxito do seu aplicativo. Use o nome da conta do SendGrid em vez do endereço de email fornecido pelo SendGrid.

Habilitar confirmação de Email

Para habilitar a confirmação por email, você modificará o código de registro usando as etapas a seguir.

  1. Na pasta Conta , abra o code-behind Register.aspx.cs e atualize o CreateUser_Click método para habilitar as seguintes alterações realçadas:

    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. Em Gerenciador de Soluções, clique com o botão direito do mouse em Default.aspx e selecione Definir como Página Inicial.

  3. Execute o aplicativo pressionando F5. Depois que a página for exibida, clique no link Registrar para exibir a página Registrar.

  4. Insira seu email e senha e clique no botão Registrar para enviar uma mensagem de email por meio do SendGrid.
    O estado atual do projeto e do código permitirá que o usuário faça logon depois de concluir o formulário de registro, mesmo que ele não tenha confirmado sua conta.

  5. Verifique sua conta de email e clique no link para confirmar seu email.
    Depois de enviar o formulário de registro, você será conectado.
    Site de exemplo – Conectado

Exigir Email confirmação antes de fazer logon

Embora você tenha confirmado a conta de email, neste ponto você não precisaria clicar no link contido no email de verificação para estar totalmente conectado. Na seção a seguir, você modificará o código que exige que novos usuários tenham um email confirmado antes de serem conectados (autenticados).

  1. No Gerenciador de Soluções do Visual Studio, atualize o CreateUser_Click evento no code-behind Register.aspx.cs contido na pasta Contas com as seguintes alterações realçadas:

    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. Atualize o LogIn método no code-behind Login.aspx.cs com as seguintes alterações realçadas:

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

Executar o aplicativo

Agora que você implementou o código para marcar se o endereço de email de um usuário foi confirmado, você pode marcar a funcionalidade nas páginas Registrar e Logon.

  1. Exclua todas as contas na tabela AspNetUsers que contenham o alias de email que você deseja testar.
  2. Execute o aplicativo (F5) e verifique se você não pode se registrar como um usuário até confirmar seu endereço de email.
  3. Antes de confirmar sua nova conta por meio do email que acabou de ser enviado, tente fazer logon com a nova conta.
    Você verá que não consegue fazer logon e que deve ter uma conta de email confirmada.
  4. Depois de confirmar seu endereço de email, faça logon no aplicativo.

Recuperação e redefinição de senha

  1. No Visual Studio, remova os caracteres de comentário do Forgot método no code-behind Forgot.aspx.cs contido na pasta Account , para que o método apareça da seguinte maneira:

    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. Abra a página Login.aspx . Substitua a marcação perto do final da seção loginForm , conforme realçado abaixo:

    <%@ 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. Abra o code-behind Login.aspx.cs e remova a marca de comentário da seguinte linha de código realçada em amarelo do Page_Load manipulador de eventos:

    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. Execute o aplicativo pressionando F5. Depois que a página for exibida, clique no link Fazer logon .

  5. Clique no link Esqueceu sua senha? para exibir a página Esqueceu Senha .

  6. Insira seu endereço de email e clique no botão Enviar para enviar um email para seu endereço, o que permitirá que você redefina sua senha.
    Verifique sua conta de email e clique no link para exibir a página Redefinir Senha .

  7. Na página Redefinir Senha , insira seu email, senha e senha confirmada. Em seguida, pressione o botão Redefinir .
    Quando você redefinir sua senha com êxito, a página Senha Alterada será exibida. Agora você pode fazer logon com sua nova senha.

Depois que um usuário cria uma nova conta local, ele é enviado por email um link de confirmação que precisa usar antes de fazer logon. Se o usuário excluir acidentalmente o email de confirmação ou o email nunca mais chegar, ele precisará do link de confirmação enviado novamente. As alterações de código a seguir mostram como habilitar isso.

  1. No Visual Studio, abra o code-behind Login.aspx.cs e adicione o seguinte manipulador de eventos após o LogIn manipulador de eventos:

    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. Modifique o LogIn manipulador de eventos no code-behind Login.aspx.cs alterando o código realçado em amarelo da seguinte maneira:

    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. Atualize a página Login.aspx adicionando o código realçado em amarelo da seguinte maneira:

    <%@ 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. Exclua todas as contas na tabela AspNetUsers que contenham o alias de email que você deseja testar.

  5. Execute o aplicativo (F5) e registre seu endereço de email.

  6. Antes de confirmar sua nova conta por meio do email que acabou de ser enviado, tente fazer logon com a nova conta.
    Você verá que não consegue fazer logon e que deve ter uma conta de email confirmada. Além disso, agora você pode reenviar uma mensagem de confirmação para sua conta de email.

  7. Insira seu endereço de email e senha e pressione o botão Reenviar confirmação .

  8. Depois de confirmar seu endereço de email com base na mensagem de email recém-enviada, faça logon no aplicativo.

Solução de problemas do aplicativo

Se você não receber um email contendo o link para verificar suas credenciais:

  • Verifique sua pasta de lixo eletrônico ou spam.
  • Faça logon em sua conta do SendGrid e clique no link Atividade do Email.
  • Tenha certeza de que você usou o nome da conta de usuário do SendGrid como um valor Web.config em vez do endereço de email da conta do SendGrid.

Recursos adicionais