none
MVC 5 dudas Identity base de datos RRS feed

  • Pregunta

  • Buenas noches,

    Viendo como autenticar un usuario observo que la mayoría se decanta por usar Identity, pero le veo un pequeño inconveniente el cual es añadir todas las tablas a la base de datos. Yo tengo una tabla de Usuarios con nick de usuarios, password y demás por lo que no me interesa crear esas tablas. ¿Hay alguna manera de usar Identity sin crear las tablas?

    Encontré este código para aplicar al login:

                User user = new User() { Email = model.Email, Password = model.Password };
    
                user = Repository.GetUserDetails(user);
    
                if (user != null)
                {
                    FormsAuthentication.SetAuthCookie(model.Email, false);
    
                    var authTicket = new FormsAuthenticationTicket(1, user.Email, DateTime.Now, DateTime.Now.AddMinutes(20), false, user.Roles);
                    string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
                    var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                    HttpContext.Response.Cookies.Add(authCookie);
                    return RedirectToAction("Index", "Home");
                }
    
                else
                {
                    ModelState.AddModelError("", "Invalid login attempt.");
                    return View(model);
                }

    Luego en el global.axac.cs se añade la siguiente función:

            protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
            {
                var authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
                if (authCookie != null)
                {
                    FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
                    if (authTicket != null && !authTicket.Expired)
                    {
                        var roles = authTicket.UserData.Split(',');
                        HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new FormsIdentity(authTicket), roles);
                    }
                }
            }

    Funciona muy bien, pero claro como se puede observar solo me deja añadir el email y los roles, por lo que no puedo acceder al Id del usuario. Aún así no se si implementarlo de esta forma es la más correcta, ya que en identity usan la función PasswordSignInAsync, pero claro esto realizara una consulta a la base de datos.

    Muchas gracias.

    sábado, 6 de enero de 2018 0:45

Todas las respuestas