none
Como obtener el nombre del usuario logueado en ASP NET MVC 5 RRS feed

  • Pregunta

  • Hola amigos del foro estoy haciendo una pagina web en ASP NET FRAMEWORK MVC 5 pasa que hice un login para iniciar sesion con usuario y lo que pasa es que quiero obtener el nombre de la sesion actual que seria el correo con el que se inicia sesion y colocarlo en el Layout para que se mire en el menu les dejo los codigos que use

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace PaginaWebEscuela.Controllers
    {
        public class AccesoController : Controller
        {
            // GET: Acceso
            public ActionResult Login()
            {
                return View();
            }
    
            [HttpPost]
            public ActionResult Login(string User, string Pass)
            {
                try
                {
                    using (Models.EscuelaDBEntitiesUsuarios db = new Models.EscuelaDBEntitiesUsuarios())
                    {
                        var oUser = (from d in db.usuario
                                     where d.email == User.Trim() && d.password == Pass.Trim()
                                     select d).FirstOrDefault();
    
                        if (oUser == null)
                        {
                            ViewBag.Error = "Usuario o Contraseña Invalida";
                            return View();
                        }
    
                        Session["User"] = oUser;
                    }
                    return RedirectToAction("Index", "Home");
                }
                catch (Exception ex)
                {
                    ViewBag.Error = ex.Message;
                    return View();
                }
            }
        }
    }

    y este es el login html

    @{
        ViewBag.Title = "Login";
        Layout = "~/Views/Shared/_LayoutLogin.cshtml";
    }
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
        <link href="~/Content/StylesEscuela.css" rel="stylesheet" />
    </head>
    <body>
        <div class="login-form">
            <h2 class="text-center">Member Login</h2>
            <form action="@Url.Content("~/Acceso/Login")" method="post">
                <div class="avatar">
                    <img src="~/AppFiles/Recursos/avatar.png" alt="Avatar" />
                </div>
                <div class="form-group">
                    <div class="login-error">
                        @ViewBag.Error
                                    <br /> <br />
                                </div>
                    <input type="email" name="User" class="form-control" placeholder="Usuario" required="required" style="max-width: 320px;" />
                </div>
                <div class="form-group">
                    <input type="password" name="Pass" class="form-control input-lg" placeholder="Contraseña" required="required" style="max-width: 320px;"/>
                </div>
                <div class="form-group clearfix">
                    <label class="pull-left checkbox-inline"><input type="checkbox"> Remember me</label>
                    <button type="submit" class="btn btn-primary btn-lg pull-right">Entrar</button>
                </div>
            </form>
            <div class="hint-text">Don't have an account? <a href="#">Sign up here</a></div>
        </div>
    </body>
    </html>     

    • Editado Geardarko miércoles, 10 de julio de 2019 16:03 Me falltaba informacion
    miércoles, 10 de julio de 2019 15:59

Respuestas

  • Hola, he editado mi respuesta, la comparto aqui nuevamente saludos.

    Lo he probado en un proyecto mio utilizando <li> y funciona bien, imagino que el Ouser es el problema, por lo que lei quieres mostrar el correo del usuario, por lo que puede que te funcione declarar otra Session que tome el valor del correo que ingresas para realizar el login.

    Session["ValorCorreo"] = User;

    o bien si lo prefieres puedes usar TempData["ValorCorreo"] = User;

    desconozco cual de los 2 sea mas correcto de utilizar con ello deberia de bastar para que muestre el correo dentro de tu dropdown.

    <li>@HttpContext.Current.Session["ValorCorreo"].ToString()<li>

    Saludos


    Luis


    • Editado LuisFSantiago miércoles, 10 de julio de 2019 17:36
    • Marcado como respuesta Geardarko miércoles, 10 de julio de 2019 18:08
    miércoles, 10 de julio de 2019 17:36

Todas las respuestas

  • Hola que tal, por lo que veo la vista que pones en el codigo es la del Login, imagino que el nombre de usuario quieres mostrarlo una vez el login este realizado, por ejemplo en un nav

    Para ello basta con hacer lo siguiente en el Layout de la vista consecuente al Login.

    @HttpContext.Current.Session["Session"].ToString()
    En tu caso cambia lo que esta dentro de los corchetes en tu caso seria por User.
    Saludos.


    Luis


    miércoles, 10 de julio de 2019 16:14
  • te agradezco tu respuesta amigo, solo un pequeño detalle puse la linea que me diste pero me dio error

    lo escribi así

    <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink("Inicio", "Index", "Home")</li> <li>@Html.ActionLink("Alumnos", "Index", "Alumnos")</li> <li>@Html.ActionLink("Cerrar Sesión", "Logout", "Home")</li>

    <li>@HttpContext.Current.Session["User"].ToString()</li> </ul> </div>

    y me salio esto en el visual studio al compilar me imagino que ha de ser como para ir al index redirecciona al login te pide iniciar sesión

    System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.'

    así que puse un if y dejo entrar 

    @if (Session["User"] != null)
                        {
                            <li>@HttpContext.Current.Session["User"].ToString()</li>
                        }

    pero ahora me salio esto

    System.Data.Entity.DynamicProxies.usuario_07D2DB3F8F74CE8C05FEA6A7E031E4D3EF325FF3F650778EF592D72EF4CAC648

    espero que puedas ayudarme te lo agradeceria mucho


    • Editado Geardarko miércoles, 10 de julio de 2019 17:02 Introduje una imagen
    miércoles, 10 de julio de 2019 16:59
  • Tu variable Ouser la cual haces que sea el valor de Session["User"] que tipo de dato es?

    De igual manera no se si las etiquetas<li> tengan algo que ver, intenta con

    <a>@HttpContext.Current.Session["Usuario"].ToString()</a>


    Lo he probado en un proyecto mio utilizando <li> y funciona bien, imagino que el Ouser es el problema, por lo que lei quieres mostrar el correo del usuario, por lo que puede que te funcione declarar otra Session que tome el valor del correo que ingresas para realizar el login.

    Session["ValorCorreo"] = User;

    o bien si lo prefieres puedes usar TempData["ValorCorreo"] = User;

    desconozco cual de los 2 sea mas correcto de utilizar con ello deberia de bastar para que muestre el correo dentro de tu dropdown.

    <li>@Session["ValorCorreo"].ToString()<li>

    Saludos

    • Editado LuisFSantiago miércoles, 10 de julio de 2019 17:34 Adicion de texto.
    miércoles, 10 de julio de 2019 17:12
  • Tu variable Ouser la cual haces que sea el valor de Session["User"] que tipo de dato es?

    De igual manera no se si las etiquetas<li> tengan algo que ver, intenta con

    <a>@HttpContext.Current.Session["Usuario"].ToString()</a>


    Luis

    Es de tipo var oUser , var

    lo puse como me dijiste e igual sigue saliendo lo mismo no sera como lo estoy haciendo en el localhost? ya que la pagina la pruebo desde visual studio aun no lo he subido, me vuelve a salir esto ya llevo varios dias intentarlo resolver pero aun no he podido

    System.Data.Entity.DynamicProxies.usuario_07D2DB3F8F74CE8C05FEA6A7E031E4D3EF325FF3F650778EF592D72EF4CAC648

    te agradezco mucho

    miércoles, 10 de julio de 2019 17:33
  • Hola, he editado mi respuesta, la comparto aqui nuevamente saludos.

    Lo he probado en un proyecto mio utilizando <li> y funciona bien, imagino que el Ouser es el problema, por lo que lei quieres mostrar el correo del usuario, por lo que puede que te funcione declarar otra Session que tome el valor del correo que ingresas para realizar el login.

    Session["ValorCorreo"] = User;

    o bien si lo prefieres puedes usar TempData["ValorCorreo"] = User;

    desconozco cual de los 2 sea mas correcto de utilizar con ello deberia de bastar para que muestre el correo dentro de tu dropdown.

    <li>@HttpContext.Current.Session["ValorCorreo"].ToString()<li>

    Saludos


    Luis


    • Editado LuisFSantiago miércoles, 10 de julio de 2019 17:36
    • Marcado como respuesta Geardarko miércoles, 10 de julio de 2019 18:08
    miércoles, 10 de julio de 2019 17:36
  • Hola, he editado mi respuesta, la comparto aqui nuevamente saludos.

    Lo he probado en un proyecto mio utilizando <li> y funciona bien, imagino que el Ouser es el problema, por lo que lei quieres mostrar el correo del usuario, por lo que puede que te funcione declarar otra Session que tome el valor del correo que ingresas para realizar el login.

    Session["ValorCorreo"] = User;

    o bien si lo prefieres puedes usar TempData["ValorCorreo"] = User;

    desconozco cual de los 2 sea mas correcto de utilizar con ello deberia de bastar para que muestre el correo dentro de tu dropdown.

    <li>@HttpContext.Current.Session["ValorCorreo"].ToString()<li>

    Saludos


    Luis


     excelente cree otra sesión con el codigo de

    Session["ValorCorreo"] = User;

    abajo de 

    Session["User"] = oUser;

    muchas gracias de verdad si funciono te estoy super agradecido era algo que me tenia preocupado ya que no me dejaba avanzar :) eres el mejor pregunte algunas personas y eres el que pudiste solucionarlo

    al final quedo así el codigo de AccesoController espero este bien el de Temp lo probe pero no funciono pero el de Session si

     public class AccesoController : Controller
        {
            // GET: Acceso
            public ActionResult Login()
            {
                return View();
            }
    
            [HttpPost]
            public ActionResult Login(string User, string Pass)
            {
                try
                {
                    using (Models.EscuelaDBEntitiesUsuarios db = new Models.EscuelaDBEntitiesUsuarios())
                    {
                        var oUser = (from d in db.usuario
                                     where d.email == User.Trim() && d.password == Pass.Trim()
                                     select d).FirstOrDefault();
    
                        if (oUser == null)
                        {
                            ViewBag.Error = "Usuario o Contraseña Invalida";
                            return View();
                        }
    
                        Session["User"] = oUser;
                        Session["ValorCorreo"] = User;
                    }
                    return RedirectToAction("Index", "Home");
                }
                catch (Exception ex)
                {
                    ViewBag.Error = ex.Message;
                    return View();
                }
            }
    
        }

    lo marcare como respuesta saludos y gracias de nuevo

    miércoles, 10 de julio de 2019 18:16
  • gracias por todo funciono de lujo
    jueves, 11 de julio de 2019 15:09
  • Excelente!

    Luis

    jueves, 11 de julio de 2019 16:22