ASP .NET Core 3.1 - Usando o Identity de cabo a rabo - IV
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 terceira parte do artigo veremos como tratar o POST do formulário de registro e como armazenar as informações no banco de dados.
Para poder receber as informações do registro do usuário teremos que implementar as seguintes funcionalidades no controlador AccountController:
Para isso vamos incluir o código a seguir no controlador AccountController:
using FuncionariosWeb.ViewModels;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
namespace FuncionariosWeb.Controllers
{
public class AccountController : Controller
{
private readonly UserManager<IdentityUser> userManager;
private readonly SignInManager<IdentityUser> signInManager;
public AccountController(UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager)
{
this.userManager = userManager;
this.signInManager = signInManager;
}
[HttpGet]
public IActionResult Register()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
// Copia os dados do RegisterViewModel para o IdentityUser
var user = new IdentityUser
{
UserName = model.Email,
Email = model.Email
};
// Armazena os dados do usuário na tabela AspNetUsers
var result = await userManager.CreateAsync(user, model.Password);
// Se o usuário foi criado com sucesso, faz o login do usuário
// usando o serviço SignInManager e redireciona para o Método Action Index
if (result.Succeeded)
{
await signInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction("index", "home");
}
// Se houver erros então inclui no ModelState
// que será exibido pela tag helper summary na validação
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
return View(model);
}
}
}
|
Vamos entender o código:
A classe UserManager<IdentityUser> contém os métodos necessários para gerenciar usuários no armazenamento de dados. Por exemplo, esta classe possui métodos como CreateAsync, DeleteAsync, UpdateAsync para criar, excluir e atualizar usuários.
A classe
SignInManager<IdentityUser> contém os métodos
necessários para o login dos usuários. Por exemplo, essa classe possui métodos
como SignInAsync, SignOutAsync para entrada e saida
do usuário.
Os serviços UserManager e SignInManager são
injetados no construtor da classe AccountController usando injeção de
construtor, e, ambos os serviços aceitam um parâmetro genérico. Usamos o
parâmetro genérico para especificar a classe User
com a qual esses serviços devem trabalhar.
No momento, estamos usando a classe IdentityUser interna como argumento para o parâmetro genérico. O parâmetro genérico nesses 2 serviços é um ponto de extensão.
Isso significa que podemos criar nosso próprio usuário personalizado com quaisquer dados adicionais que desejamos capturar sobre o usuário e, em seguida, conectar essa classe personalizada como um argumento para o parâmetro genérico em vez da classe IdentityUser interna.
Neste momento podemos executar o projeto e fazer o registro de um usuário. Os dados serão armazenados na tabela AspNetUsers no SQL Server.
Executando o projeto iremos obter:
Para confirmar que os dados foram gravados na tabela
AspNetUsers podemos verificar os dados no SQL Server Management Studio ou
no Visual Studio 2019 usando o Server Explorer:
No próximo artigo veremos como tratar com a complexidade das senhas que podemos usar com o Identity.
"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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
ASP .NET Core - Implementando a segurança com ... - Macoratti
ASP.NET Core MVC - Criando um Dashboard ... - Macoratti.net
C# - Gerando QRCode - Macoratti
ASP .NET - Gerando QRCode com a API do Google