1
resposta

Como personalizar o identity

Na aula, o professor fez consumo da função de login fornecida pelo Identity, certo? Se eu for usar as funções do próprio Identity, como faço para adicionar coisas nelas? Elas são acessíveis? Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Essa é a classe de usuário que eu criei herdando o identity, para eu poder colocar props a mais... Também fiz, função de registro personalizada

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O registro está funcionando... os usuários são salvos no banco de dados, e o processo de login também funciona, aqui está o login: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O problema o inicio de sessão... Eu vi na aula que foi gerado um cookie específico ".Identity". Porém no meu programa, quando eu faço login, eu não tenho certeza se foi iniciada corretamente uma sessão... Em resumo, eu preciso ser capaz de resgatar informações sobre o usuário atualmente logado via back-end.

Esses são os cookies que aaprecem pra mim: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Alguma recomendação do que fazer? Tem como eu personalizar as funções do identity?

1 resposta

Olá Claudete! Tudo joia?

Para personalizar as funções do Identity no ASP.NET, você pode estender as classes e métodos fornecidos pelo Identity. Vou te guiar pelos passos para adicionar propriedades e personalizar as funções de login e registro.

  1. Personalizando a Classe de Usuário

    Você já criou uma classe de usuário personalizada herdando de IdentityUser, o que é ótimo. Aqui está um exemplo baseado na sua imagem:

    using Microsoft.AspNetCore.Identity;
    using System.ComponentModel.DataAnnotations;
    
    namespace Litteris0._3.Models
    {
        public class Users : IdentityUser<int>
        {
            [StringLength(40, MinimumLength = 5, ErrorMessage = "Seu nome de usuário deve ter pelo menos 5 caracteres")]
            [Required(ErrorMessage = "Por favor, informe seu nome de usuário.")]
            public string? Name { get; set; }
    
            public string? Cpf { get; set; }
            public string? Cnpj { get; set; }
            public string? Formats { get; set; }
        }
    }
    
  2. Personalizando o Registro

    Você já tem uma função de registro personalizada. Certifique-se de que está usando o UserManager corretamente para criar o usuário e fazer o login:

    [HttpPost]
    public async Task<IActionResult> Register(RegisterVM model)
    {
        if (ModelState.IsValid)
        {
            if ((model.Cpf != null) && _verifyExistence.VerificarExistenciaCpf(model.Cpf))
            {
                // Lógica para verificar CPF
            }
    
            if ((model.Cnpj != null) && _verifyExistence.VerificarExistenciaCnpj(model.Cnpj))
            {
                // Lógica para verificar CNPJ
            }
    
            var user = await _userManager.FindByEmailAsync(model.Email);
            if (user != null)
            {
                ModelState.AddModelError("", "Email em uso");
                return View(model);
            }
    
            var newUser = new Users
            {
                Email = model.Email,
                Name = model.Name,
                Cpf = model.Cpf,
                Cnpj = model.Cnpj,
                UserName = model.Name
            };
    
            var result = await _userManager.CreateAsync(newUser, model.Password);
            if (result.Succeeded)
            {
                await _signInManager.SignInAsync(newUser, isPersistent: false);
                return RedirectToAction("HomeLogado", "Logado");
            }
    
            foreach (var error in result.Errors)
            {
                ModelState.AddModelError("", error.Description);
            }
        }
    
        return View(model);
    }
    
  3. Personalizando o Login

    Para personalizar o login, você pode verificar o usuário e senha, e então fazer o login usando SignInManager:

    [HttpPost]
    public async Task<IActionResult> Login(LoginVM model)
    {
        if (ModelState.IsValid)
        {
            var user = await _userManager.FindByEmailAsync(model.Email);
            if (user != null)
            {
                var passwordCheck = await _userManager.CheckPasswordAsync(user, model.Password);
                if (passwordCheck)
                {
                    var result = await _signInManager.PasswordSignInAsync(user, model.Password, false, false);
                    if (result.Succeeded)
                    {
                        return RedirectToAction("HomeLogado", "Logado");
                    }
                    ModelState.AddModelError("", "Algo deu errado");
                }
                else
                {
                    ModelState.AddModelError("", "Credenciais Inválidas");
                }
            }
            else
            {
                ModelState.AddModelError("", "Usuário não encontrado");
            }
        }
    
        return View(model);
    }
    
  4. Verificando a Sessão do Usuário

    Para verificar se a sessão foi iniciada corretamente e resgatar informações sobre o usuário logado, você pode usar User.Identity no backend:

    public IActionResult GetUserInfo()
    {
        if (User.Identity.IsAuthenticated)
        {
            var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
            var user = _userManager.FindByIdAsync(userId).Result;
            // Use as informações do usuário conforme necessário
        }
        else
        {
            // Usuário não autenticado
        }
        return View();
    }
    
  5. Cookies de Autenticação

    Certifique-se de que a configuração de cookies está correta no Startup.cs ou Program.cs:

    services.ConfigureApplicationCookie(options =>
    {
        options.Cookie.Name = ".AspNetCore.Identity.Application";
        options.LoginPath = "/Account/Login";
        options.LogoutPath = "/Account/Logout";
        options.AccessDeniedPath = "/Account/AccessDenied";
    });
    

Com essas etapas, você deve conseguir personalizar as funções do Identity e garantir que a sessão do usuário esteja sendo gerada.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.