ASP .NET MVC 5 - Confirmação de conta via email e Recuperação de senha - II
![]() |
Neste
tutorial veremos como criar uma aplicação ASP .NET MVC
5 com confirmação de email e recuperação de senha usando o sistema de
membership ASP .NET Identity.
|
Na primeira parte do artigo implementamos a confirmação do email do usuário e agora vamos alterar esse comportamento e vamos obrigar o usuário a confirmar o email antes de se logar e implementar a recuperação de senha.
Recursos usados :
Visual Studio 2013 Express for Web (com update 3 ou superior)
Confirmando a conta via email antes de fazer o login
Abra o projeto Mvc_ConfRec criado na primeira parte do artigo usando o VS 2013 Express for web;
Vamos começar alterando novamente o código da Action Register do arquivo AccountController na pasta Controllers.
Comente a linha que realiza o login durante o registro : await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
Inclua as linhas :
ViewBag.Message = "Verifique o seu email e confirme a
sua conta, você tem que confirmar a sua conta antes de fazer o login ";
return View("Info");
E
comente a linha que redireciona o usuário para a Action Index :
return RedirectToAction("Index", "Home");
Abaixo vemos o código completo com as alterações:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
//await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
//For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
//Send an email with this link
string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await ServicoEmail.EnviaEmailAsync(model.Email, "Confirme a sua conta", "Confirme a sua conta clicando <a href=\"" + callbackUrl + "\">AQUI</a>");
ViewBag.Message = "Verifique o seu email e confirme a sua conta, você tem que confirmar a sua conta antes de fazer o login ";
return View("Info");
//return RedirectToAction("Index", "Home");
}
AddErrors(result);
}
//If we got this far, something failed, redisplay form
return View(model);
}
|
Agora temos que criar a view Info.cshtml na pasta /Views/Shared.
Clique com o botão direito do mouse na pasta Shared e a seguir em Add -> View;
Informe o nome Info e marque para usar uma página de layout e clique no botão Add;
![]() |
A seguir inclua o código abaixo no arquivo Info.cshtml:
@{
ViewBag.Title = "Info";
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>
<hr />
Macoratti.net
|
Agora vamos alterar a Action Login do arquivo AccountController.
Inclua as linhas destacadas em azul conforme mostra o código abaixo:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// Requeira que o usuário tenha confirmado o email antes de logar
var user = await UserManager.FindByNameAsync(model.Email);
if (user != null)
{
if (!await UserManager.IsEmailConfirmedAsync(user.Id))
{
ViewBag.errorMessage = "Você tem que confirmar o email antes de fazer o login.";
return View("Error");
}
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
|
Vamos também alterar o código da view Error.cshtml da pasta Shared.
Abra o arquivo Error.cshtml e altere o seu código conforme a seguir:
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Error";
}
<h1 class="text-danger">Error.</h1>
@{
if (String.IsNullOrEmpty(ViewBag.errorMessage))
{
<h2 class="text-danger">Ocorreu um erro durante o processamento da sua requisição</h2>
}
else
{
<h2 class="text-danger">@ViewBag.errorMessage</h2>
}
}
|
Agora é só alegria...
Já podemos testar nossa implementação...
Antes de testar inclua o atributo [Authorize] na Action Contact do controlador Home.
Assim podemos verificar que usuários anônimos não terão acesso a página e usuários autenticados terão.
[Authorize]
public ActionResult Contact()
{
ViewBag.Message = "Bem-Vindo, o seu acesso esta liberado...";
return View();
}
|
Agora vamos rodar a nossa aplicação e verificar o seu comportamento registrando um novo usuário:
![]() |
Ao clicar no botão Registrar o usuário não será mais enviado para página principal do site (Home/Index).
Ele será direcionado para a view Info que exibe a mensagem de que ele tem que confirmar o email antes de logar.
![]() |
Vamos verificar se o email foi enviado para o usuário macoratti@ig.com.br consultando a caixa de mensagens:
![]() |
Vemos que o usuário recebeu o email para confirmar a conta. Vamos abrir o email...
![]() |
Vamos clicar no link solicitado para ver o que acontece...
![]() |
Voilá...
O usuário é redirecionado para o site e recebe a mensagem agradecendo por confirmar o email e um link para fazer o login.
Se o usuário clicar no menu Contato ele não terá acesso e será redirecionado para a página de login provando que usuários anônimos não têm acesso ao site.
Na terceira parte do artigo vamos implementar a recuperação da senha.
Pegue o projeto completo aqui :
Mvc_ConfRec2.zip (sem as referências)
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: