Sistema de Login y Autenticación en C#

Sistema de Login y Autenticación en C#

Compartir

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.


Compartir

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *