Aquí tienes un ejemplo de un sistema de login y autenticación simple en C# utilizando ASP.NET Core. En este ejemplo, utilizaremos Entity Framework Core para acceder a la base de datos y ASP.NET Identity para manejar la autenticación y la gestión de usuarios. Asegúrate de haber configurado Entity Framework Core y haber creado una base de datos antes de comenzar.
Creación del modelo de usuario:
using Microsoft.AspNetCore.Identity;
public class ApplicationUser : IdentityUser
{
// Agrega propiedades adicionales si es necesario
}
Configuración de Entity Framework y ASP.NET Identity en Startup.cs:
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Configura opciones de seguridad aquí
services.AddMvc();
}
Configuración de conexión a la base de datos en appsettings.json:
"ConnectionStrings": {
"DefaultConnection": "TuCadenaDeConexion"
}
Creación de la clase ApplicationDbContext:
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
// Define tus DbSet aquí si es necesario
}
Creación de un controlador de cuenta para manejar el login y la autenticación:
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
public class AccountController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly SignInManager<ApplicationUser> _signInManager;
public AccountController(
UserManager<ApplicationUser> userManager,
SignInManager<ApplicationUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
[HttpGet]
public IActionResult Login()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError(string.Empty, "Error de inicio de sesión. Por favor, inténtalo de nuevo.");
}
}
return View(model);
}
public IActionResult Logout()
{
_signInManager.SignOutAsync();
return RedirectToAction("Index", "Home");
}
}
Creación de una vista Razor para la página de login (Login.cshtml):
@model LoginViewModel
<form asp-controller="Account" asp-action="Login" method="post">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="UserName"></label>
<input asp-for="UserName" class="form-control" />
<span asp-validation-for="UserName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Password"></label>
<input asp-for="Password" type="password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
<div class="form-group">
<div class="form-check">
<input asp-for="RememberMe" class="form-check-input" />
<label class="form-check-label" asp-for="RememberMe"></label>
</div>
</div>
<button type="submit" class="btn btn-primary">Iniciar sesión</button>
</form>
Creación de una vista Razor para mostrar la página de inicio después del login (Index.cshtml):
<p>Bienvenido, @User.Identity.Name</p>
<a asp-controller="Account" asp-action="Logout">Cerrar sesión</a>
Este es un ejemplo básico de cómo crear un sistema de login y autenticación en ASP.NET Core utilizando ASP.NET Identity. A medida que tu aplicación crece, es posible que desees agregar características adicionales, como la gestión de usuarios, la recuperación de contraseñas, etc. Además, asegúrate de aplicar medidas de seguridad adecuadas y revisar las mejores prácticas de seguridad en el desarrollo de aplicaciones web.