none
como recuperar id usuario autenticado asp mvc RRS feed

  • Pregunta

  • hola un saludo a la comunidad...

    la pregunta es:

    como recuperar el id del usuario autenticado?

    estoy usando asp mvc y seguridad por formularios

    todo funciona bien, pero cuando se loguea un usuario tengo que recuperar su id, y pasarlo a cada vista de la aplicación que valla visitando.

    lo que hago hasta este momento es que en cada acción del controlador verifico si hay una session["usuarioId] y de ahí continuo según esa validación.

    revisando en el foro me encontré con la técnica de Membership pero todavía no alcanzo a entender como funciona. 

    de antemano gracias por su respuestas...


    LOWELLPELIKNO

    miércoles, 22 de abril de 2015 22:36

Todas las respuestas

  • hola

    >>pero cuando se loguea un usuario tengo que recuperar su id, y pasarlo a cada vista de la aplicación que valla visitando.

    podrias guardar info adicional en el token de autenticacion

    Add Custom Data to the Authentication Method 

    como veras puedes poner info adicional en la autenticacion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 22 de abril de 2015 23:00
  • Estimado LOWELL_PELIKNO

    El usaurio autenticado lo tienes en el Controllador en una propiedad User

    Que como veras es la implementacion de la interfaz IPrincipal
    Donde podras consultar por Identity.Name para elnombre del usuario que se registro en tu formulario

    Estas implementnado Membership? SimpleMemberhip? OWinIdentity?
    En este Name tienes poro ejemplo el nombre de usaurio (que dependiendo como registries usaurio es el nombre de usaurio unico en el sistema) o el email si requeriste que el nombre de usuario sea el email. 
    A lo que voy es que no es el ID de la DB

    Como los nombre de usuario son unicos en la membresia (deben serlo) con esto es suficiente para tus acciones
    Si no lo es puedes recuperar el ID desde la DB o guardarlo como bien dices en alguna variable de session (pero cuidado tendrias que actualizar o verificar si tiene dato porque la session se puede perder por varios motivos y el usuario sigue estando validando por la cookie de autenticacion

    Espero que sirva de ayuda o guia


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    viernes, 24 de abril de 2015 16:50
  • hola gracias pos sus respuestas.

    lo que me convence mas es lo que leí de modificar la cookie de autenticacion, agregándole el id del usuario pero me perdí haciéndolo.

    algunos ejemplos en español???


    LOWELLPELIKNO

    miércoles, 29 de abril de 2015 1:42
  • hola un saludo.

    logre crear un ejemplo de autentiacion con la cookie,

    no se si este al 100% pero tendré que hacer las pruebas, si no es a si por favor avisar para corregirlo.

    en el login ago esto:

    [AllowAnonymous]
            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Login(LoginModel model, string returnUrl)
            {
                if (ModelState.IsValid)
                {
                    // Comando sql para hacer la consulta a la base de datos.
                    SqlConnection sqlCon;
                    SqlCommand sqlCommandRead;
                    SqlDataReader sqlDataReader;
                    UserLoginModels objUserLogin; 
                    string cadenaConexion = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
                    using(sqlCon = new SqlConnection(cadenaConexion))
                    {
                        sqlCon.Open();
                        string query = "Select idUsuario, nombreUsuario from dtUsuarios where nombreUsuario='" + model.UserName + "' and password = '" + model.Password + "'";
                        using(sqlCommandRead = new SqlCommand(query,sqlCon))
                        {
                            using(sqlDataReader = sqlCommandRead.ExecuteReader())
                            {
                                if (sqlDataReader.HasRows)
                                {
                                    objUserLogin = new UserLoginModels(); 
                                    while (sqlDataReader.Read())
                                    {
                                        objUserLogin.id = (Int32)sqlDataReader["idUsuario"];
                                        objUserLogin.nombre = sqlDataReader["nombreUsuario"].ToString();
                                        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, objUserLogin.nombre, DateTime.Now, DateTime.Now.AddMinutes(30), model.RememberMe, objUserLogin.id.ToString());
    
                                        //2,
                                        //user.LaunchKeyUserHash,
                                        //DateTime.Now,
                                        //DateTime.Now.AddMinutes(15),
                                        //false,
                                        //string.Format("{0};;{1}", user.LastAuthRequest, user.FirstName)
    
                                        string encryptedTicket = FormsAuthentication.Encrypt(ticket);
                                        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); cookie.Expires = DateTime.Now.AddMinutes(30);
                                        Response.Cookies.Add(cookie);
                                        return RedirectToAction("Index", "Home");
                                    }
    
                                }
                                else
                                {
                                    ModelState.AddModelError("", "The user name or password provided is incorrect.");
                                }
    
                            }
                        }
                    }
    
                    
                    #region 'membership'
    
                    
                    //if (Membership.ValidateUser(model.UserName, model.Password))
                    //{
                    //    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                    //    if (Url.IsLocalUrl(returnUrl))
                    //    {
                    //        return Redirect(returnUrl);
                    //    }
                    //    else
                    //    {
                    //        return RedirectToAction("Index", "Home");
                    //    }
                    //}
                    #endregion
                }
                    else
                    {
                        ModelState.AddModelError("", "The user name or password provided is incorrect.");
                    }
                
    
                // If we got this far, something failed, redisplay form
                return View(model);
            }
    

    en el Home Controller hago esto:

     public ActionResult Index()
            {
                HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
                //HttpCookie authCookied = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
                if(authCookie != null)
                {
                    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
                    string nombre = ticket.Name.ToString();
                    string id = ticket.UserData.ToString();
    
                }
                
    
                ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
    
                return View();
            }

    ese seria el ejemplo pos si a alguien le sirve de algo...


    LOWELLPELIKNO

    miércoles, 29 de abril de 2015 19:21
  • Muchas Gracias

    martes, 6 de septiembre de 2016 18:55