ASP .NET Core 3.1 - Usando o Identity de cabo a rabo - VI


Hoje vamos continuar a série de artigos mostrando como usar o ASP .NET Core Identiy na versão 3.1 da ASP .NET .Core e do EF Core.

Continuando a quinta parte do artigo veremos como exibir e/ou ocultar os links para login e registro do usuário na barra de navegação e como implementar o Logout do usuário.

Vamos implementar o seguinte:

  1. Se o usuário não estiver logado, vamos exibir os links para Login e Registro;
  2. Se o usuário estiver logado, vamos ocultar os links para Login e Registro e exibir o link para Logout;

Para poder fazer isso vamos usar um recurso da ASP .NET Core chamado view injection que permite injetar dependências em uma view usando a palavra-chave @inject.

Vamos então injetar o serviço SignInManager na view _Layout.cshtml e user este serviço para verificar se o usuário esta logado ou não.

Inclua o trecho de código destacado em azul no arquivo _Layout.cshtml:

         ...
       <div class="collapse navbar-collapse" id="collapsibleNavbar">
           <ul class="navbar-nav ml-auto">
                @*Se o usuário esta logado exibir o link de logout*@
                  @if (SignInManager.IsSignedIn(User))
                   {
                            <li class="nav-item">
                                <form method="post" asp-controller="account" asp-action="logout">
                                    <button type="submit" style="width:auto"
                                            class="nav-link btn btn-link py-0">
                                        Logout @User.Identity.Name
                                    </button>
                                </form>
                            </li>
                     }
                     else
                     {
                            <li class="nav-item">
                                <a class="nav-link" asp-controller="account" asp-action="register">
                                    Registrar
                                </a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link" asp-controller="account" asp-action="login">
                                    Login
                                </a>
                            </li>
                    }
                </ul>
           ...

Dessa forma agora estaremos exibindo os links para Login e Registro para usuários não logados e o link de Logout para usuários que estiverem logados.

Temos que implementar o método Action Logout no controlador AccountController:

        [HttpPost]
        public async Task<IActionResult> Logout()
        {
            await signInManager.SignOutAsync();
            return RedirectToAction("index", "home");
        }

Aqui usamos o método SignOutAsync() da instância de SingInManager para fazer o logout do usuário.

Executando o projeto teremos o seguinte resultado:

No próximo artigo veremos como implementar o login do usuário.

"E Jesus lhe disse: Ninguém, que lança mão do arado e olha para trás, é apto para o reino de Deus."
Lucas 9:62

Referências:


José Carlos Macoratti