{"id":1809,"date":"2023-11-20T10:18:43","date_gmt":"2023-11-20T13:18:43","guid":{"rendered":"https:\/\/stackcodelab.com\/blog\/?p=1809"},"modified":"2023-11-20T10:18:44","modified_gmt":"2023-11-20T13:18:44","slug":"sistema-de-login-y-autenticacion-en-c","status":"publish","type":"post","link":"https:\/\/stackcodelab.com\/blog\/sistema-de-login-y-autenticacion-en-c\/","title":{"rendered":"Sistema de Login y Autenticaci\u00f3n en C#"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Aqu\u00ed tienes un ejemplo de un sistema de login y autenticaci\u00f3n 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\u00f3n y la gesti\u00f3n de usuarios. Aseg\u00farate de haber configurado Entity Framework Core y haber creado una base de datos antes de comenzar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Creaci\u00f3n del modelo de usuario:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using Microsoft.AspNetCore.Identity;\r\n\r\npublic class ApplicationUser : IdentityUser\r\n{\r\n    \/\/ Agrega propiedades adicionales si es necesario\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Configuraci\u00f3n de Entity Framework y ASP.NET Identity en Startup.cs:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using Microsoft.AspNetCore.Identity;\r\nusing Microsoft.EntityFrameworkCore;\r\n\r\npublic void ConfigureServices(IServiceCollection services)\r\n{\r\n    services.AddDbContext&lt;ApplicationDbContext>(options =>\r\n        options.UseSqlServer(Configuration.GetConnectionString(\"DefaultConnection\")));\r\n\r\n    services.AddIdentity&lt;ApplicationUser, IdentityRole>()\r\n        .AddEntityFrameworkStores&lt;ApplicationDbContext>()\r\n        .AddDefaultTokenProviders();\r\n\r\n    \/\/ Configura opciones de seguridad aqu\u00ed\r\n\r\n    services.AddMvc();\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Configuraci\u00f3n de conexi\u00f3n a la base de datos en appsettings.json:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"ConnectionStrings\": {\r\n    \"DefaultConnection\": \"TuCadenaDeConexion\"\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Creaci\u00f3n de la clase ApplicationDbContext:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using Microsoft.AspNetCore.Identity.EntityFrameworkCore;\r\nusing Microsoft.EntityFrameworkCore;\r\n\r\npublic class ApplicationDbContext : IdentityDbContext&lt;ApplicationUser>\r\n{\r\n    public ApplicationDbContext(DbContextOptions&lt;ApplicationDbContext> options)\r\n        : base(options)\r\n    {\r\n    }\r\n\r\n    \/\/ Define tus DbSet aqu\u00ed si es necesario\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Creaci\u00f3n de un controlador de cuenta para manejar el login y la autenticaci\u00f3n:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using Microsoft.AspNetCore.Identity;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing System.Threading.Tasks;\r\n\r\npublic class AccountController : Controller\r\n{\r\n    private readonly UserManager&lt;ApplicationUser> _userManager;\r\n    private readonly SignInManager&lt;ApplicationUser> _signInManager;\r\n\r\n    public AccountController(\r\n        UserManager&lt;ApplicationUser> userManager,\r\n        SignInManager&lt;ApplicationUser> signInManager)\r\n    {\r\n        _userManager = userManager;\r\n        _signInManager = signInManager;\r\n    }\r\n    &#91;HttpGet]\r\n    public IActionResult Login()\r\n    {\r\n        return View();\r\n    }\r\n\r\n    &#91;HttpPost]\r\n    &#91;ValidateAntiForgeryToken]\r\n    public async Task&lt;IActionResult> Login(LoginViewModel model)\r\n    {\r\n        if (ModelState.IsValid)\r\n        {\r\n            var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false);\r\n            if (result.Succeeded)\r\n            {\r\n                return RedirectToAction(\"Index\", \"Home\");\r\n            }\r\n            else\r\n            {\r\n                ModelState.AddModelError(string.Empty, \"Error de inicio de sesi\u00f3n. Por favor, int\u00e9ntalo de nuevo.\");\r\n            }\r\n        }\r\n        return View(model);\r\n    }\r\n\r\n    public IActionResult Logout()\r\n    {\r\n        _signInManager.SignOutAsync();\r\n        return RedirectToAction(\"Index\", \"Home\");\r\n    }\r\n}\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Creaci\u00f3n de una vista Razor para la p\u00e1gina de login (Login.cshtml):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@model LoginViewModel\r\n\r\n&lt;form asp-controller=\"Account\" asp-action=\"Login\" method=\"post\">\r\n    &lt;div asp-validation-summary=\"All\" class=\"text-danger\">&lt;\/div>\r\n    &lt;div class=\"form-group\">\r\n        &lt;label asp-for=\"UserName\">&lt;\/label>\r\n        &lt;input asp-for=\"UserName\" class=\"form-control\" \/>\r\n        &lt;span asp-validation-for=\"UserName\" class=\"text-danger\">&lt;\/span>\r\n    &lt;\/div>\r\n    &lt;div class=\"form-group\">\r\n        &lt;label asp-for=\"Password\">&lt;\/label>\r\n        &lt;input asp-for=\"Password\" type=\"password\" class=\"form-control\" \/>\r\n        &lt;span asp-validation-for=\"Password\" class=\"text-danger\">&lt;\/span>\r\n    &lt;\/div>\r\n    &lt;div class=\"form-group\">\r\n        &lt;div class=\"form-check\">\r\n            &lt;input asp-for=\"RememberMe\" class=\"form-check-input\" \/>\r\n            &lt;label class=\"form-check-label\" asp-for=\"RememberMe\">&lt;\/label>\r\n        &lt;\/div>\r\n    &lt;\/div>\r\n    &lt;button type=\"submit\" class=\"btn btn-primary\">Iniciar sesi\u00f3n&lt;\/button>\r\n&lt;\/form>\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Creaci\u00f3n de una vista Razor para mostrar la p\u00e1gina de inicio despu\u00e9s del login (Index.cshtml):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;p>Bienvenido, @User.Identity.Name&lt;\/p>\r\n&lt;a asp-controller=\"Account\" asp-action=\"Logout\">Cerrar sesi\u00f3n&lt;\/a>\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Este es un ejemplo b\u00e1sico de c\u00f3mo crear un sistema de login y autenticaci\u00f3n en ASP.NET Core utilizando ASP.NET Identity. A medida que tu aplicaci\u00f3n crece, es posible que desees agregar caracter\u00edsticas adicionales, como la gesti\u00f3n de usuarios, la recuperaci\u00f3n de contrase\u00f1as, etc. Adem\u00e1s, aseg\u00farate de aplicar medidas de seguridad adecuadas y revisar las mejores pr\u00e1cticas de seguridad en el desarrollo de aplicaciones web.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aqu\u00ed tienes un ejemplo de un sistema de login y autenticaci\u00f3n 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\u00f3n y la gesti\u00f3n de usuarios. Aseg\u00farate de haber configurado Entity Framework Core y haber creado una base [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1811,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[34],"tags":[],"class_list":["post-1809","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-y-otras-hierbas"],"uagb_featured_image_src":{"full":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/login-en-C.jpg",1000,665,false],"thumbnail":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/login-en-C-150x150.jpg",150,150,true],"medium":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/login-en-C-300x200.jpg",300,200,true],"medium_large":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/login-en-C-768x511.jpg",768,511,true],"large":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/login-en-C.jpg",1000,665,false],"1536x1536":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/login-en-C.jpg",1000,665,false],"2048x2048":["https:\/\/stackcodelab.com\/blog\/wp-content\/uploads\/2023\/11\/login-en-C.jpg",1000,665,false]},"uagb_author_info":{"display_name":"arquitecto","author_link":"https:\/\/stackcodelab.com\/blog\/author\/arquitecto\/"},"uagb_comment_info":0,"uagb_excerpt":"Aqu\u00ed tienes un ejemplo de un sistema de login y autenticaci\u00f3n 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\u00f3n y la gesti\u00f3n de usuarios. Aseg\u00farate de haber configurado Entity Framework Core y haber creado una base&hellip;","_links":{"self":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/1809","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/comments?post=1809"}],"version-history":[{"count":1,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/1809\/revisions"}],"predecessor-version":[{"id":1812,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/posts\/1809\/revisions\/1812"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/media\/1811"}],"wp:attachment":[{"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/media?parent=1809"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/categories?post=1809"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stackcodelab.com\/blog\/wp-json\/wp\/v2\/tags?post=1809"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}