ASP .NET Core -  Implementando a segurança com autenticação via Cookies e ADO .NET - II

 Neste artigo eu vou mostrar como implementar a autenticação via cookie em uma aplicação ASP .NET Core usando a ADO .NET. 

Continuando a primeira parte do artigo vamos definir as views da nossa aplicação e a seguir fazer o teste de registro e autenticação de um novo usuário.

Para definir as views vamos usar o Scaffolding clicando com o botão direito sobre o método Action do controlador e a seguir clicar em Add View;

A seguir informamos o nome da View , marcamos a opção Use a layout page e clicamos no botão Add.

Recursos usados:

Criando as views do controlador : LoginController

Vamos criar agora as views para os métodos Action do Controlador LoginController

1- View RegistrarUsuario.cshtml

@model Usuario
<h2>Registrar</h2>
<h4>Novo Usuário</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        @if (TempData["Sucesso"] != null)
        {
            <p class="alert alert-success">@TempData["Sucesso"]  
            <a asp-action="LoginUsuario">Clique para fazer o login</a></p>
        }
        @if (TempData["Falhou"] != null)
        {
            <p class="alert alert-danger">@TempData["Falhou"]</p>
        }
            <form asp-action="RegistrarUsuario">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <div class="form-group">
                    <label asp-for="Login" class="control-label"></label>
                    <input asp-for="Login" class="form-control" />
                    <span asp-validation-for="Login" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Senha" class="control-label"></label>
                    <input asp-for="Senha" class="form-control" />
                    <span asp-validation-for="Senha" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Nome" class="control-label"></label>
                    <input asp-for="Nome" class="form-control" />
                    <span asp-validation-for="Nome" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Email" class="control-label"></label>
                    <input asp-for="Email" class="form-control" />
                    <span asp-validation-for="Email" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <input type="submit" value="Registar Usuário" class="btn btn-default btn-primary" />
                </div>
            </form>
    </div>
</div>
<div>
    <a asp-action="LoginUsuario">Retornar para o Login</a>
</div>
@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

Temos nesta View o formulário para registrar um novo usuário que é apresentando pelo método Action RegistrarUsuario(GET) e será processado pela Action RegistrarUsuario(POST).

2- View LoginUsuario.cshtml
 
@model Usuario
<h2>Login</h2>
<hr />
<div class="row">
    <div class="col-md-4">
        @if (TempData["LoginUsuarioFalhou"] != null)
        {
            <p class="alert alert-danger">@TempData["LoginUsuarioFalhou"]</p>
        }
        <form asp-action="LoginUsuario">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Login" class="control-label"></label>
                <input asp-for="Login" class="form-control" />
                <span asp-validation-for="Login" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Senha" class="control-label"></label>
                <input asp-for="Senha" class="form-control" />
                <span asp-validation-for="Senha" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Login" class="btn btn-default btn-success" />
                <a asp-action="RegistrarUsuario" class="btn btn-info">Registrar</a>
            </div>
        </form>
    </div>
</div>
@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

Nesta view temos o formulário para Login que vai realizar a autenticação do usuário.

Criando a view do controlador : UsuarioController

Vamos criar a view UsuarioHome do respectivo método Action do controlador UsuarioControler

1- View UsuarioHome.cshtml
 
@{
    ViewData["Title"] = "UsuarioHome";
}
<ul class="nav navbar-nav navbar-right">
    <li>
        <a asp-action="Logout">Logout</a>
    </li>
</ul>
<h2>UsuarioHome</h2>
<hr />
<h3>Esta é página do Usuário</h3>
<p>
    <div>
        Exemplo de autenticação usando cookies usando uma abordagem com ADO .NET
    </div>
</p>

A view UsuarioHome somente será acessada por usuários autenticados visto que no controlador UsuarioController estamos definindo o atributo Authorize:

    [Authorize]
    public class UsuarioController : Controller
    {
       public IActionResult UsuarioHome()
       {
          return View();
       }
       [HttpGet]
       public async Task<IActionResult> Logout()
       {
           await HttpContext.SignOutAsync();
           return RedirectToAction("UsuarioLogin", "Login");
       }
    }

O atributo Authorize indica que este controlador somente será acessado por usuário autenticados. Assim quando uma requisição de autenticação é feita o middleware vai checar para um cookie de autenticação que foi definido no login.

Se o cookie for encontrado então o login foi feito com sucesso e o usuário será redirectionado para a view UsuarioHome. Se o cookie não for encontrado o usuário é encaminhado para página de Login , que foi definida no arquivo Startup em options.LoginPath.

Temos também um método Logout o qual irá limpar o cookie de autenticação e desfazer o login do usuário.

Executando o projeto iremos obter o seguinte resultado :

Pegue o projeto completo aqui :  AspCore_AutenticaCookie.zip

"Jesus lhes respondeu, e disse: A minha doutrina não é minha, mas daquele que me enviou.
Se alguém quiser fazer a vontade dele, pela mesma doutrina conhecerá se ela é de Deus, ou se eu falo de mim mesmo."

João 7:16,17

 

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 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti