net mvc custom asp asp.net httpcontext custom-membershipprovider iidentity

asp.net - mvc - HttpContext.Current.User.Identity.Name siempre es string.Empty



membership asp net (7)

Hola, uso un MembershipProvider personalizado.

Quiero saber el nombre de usuario actual durante un escenario de aplicación, pero cuando intento acceder a HttpContext.Current.User.Identity.Name siempre devuelve string.Empty.

if (Membership.ValidateUser(tbUsername.Text, tbPassword.Text)) { FormsAuthentication.SetAuthCookie(tbUsername.Text, true); bool x = User.Identity.IsAuthenticated; //true string y = User.Identity.Name; //"" FormsAuthentication.RedirectFromLoginPage(tbUsername.Text, cbRememberMe.Checked); }

¿Me estoy perdiendo de algo?


Como ya sugirió el método FormsAuthentication.RedirectFromLoginPage() , establece la cookie de autenticación automáticamente.

Sin embargo, en mi caso, tuve aplicaciones web anidadas en las que había borrado la etiqueta <httpModules> en la aplicación secundaria (para que no heredara httpModules de su aplicación principal) en el archivo web.config . Eliminar los padres no deseados httpModules hizo que todo volviera a funcionar.

Es mejor revisar esta etiqueta antes de complicar las cosas :)


El valor de HttpContext.Current.User.Identity.Name se establece mediante la llamada a RedirectFromLoginPage . Puede obtener el ID de usuario actual de HttpContext.Current.User.Identity.Name una vez que se le redirige a una nueva página. No estoy seguro de por qué necesitaría acceder al nombre de usuario a través de la propiedad Usuario en este contexto, ¿no podría simplemente usar el valor contenido en tbUsername.Text?


Intente System.Web.HttpContext.Current.Request.LogonUserIdentity.Name lugar de User.Identity.Name . Funcionó para mí.


Si está buscando el nombre del usuario del proveedor de membresía, intente algo como esto ...

var user = Membership.GetUser( HttpContext.Current.User.Identity.Name );


Si está utilizando la reescritura de URL o cambie su URL, puede deberse a que devuelva un valor nulo vacío. Debe intentar cambiar la ruta de acceso de su URL de .html a .aspx o ninguna extensión. Este es un problema para mi caso. Intenta. Espero que esto sea útil.


en la versión de VS Community 2015, si crea una aplicación de formularios web, automáticamente agrega códigos en el nodo web.config para eliminar FormsAuthentication, intente eliminar a continuación la sección

<modules> <remove name="FormsAuthentication"/> </modules>


FormsAuthentication.SetAuthCookie(tbUsername.Text, true); bool x = User.Identity.IsAuthenticated; //true string y = User.Identity.Name; //""

El problema que tiene es que en este punto solo está configurando la cookie de autenticación, el IPrincipal que se crea dentro del módulo de autenticación de formularios no ocurrirá hasta que haya una nueva solicitud, por lo que en ese momento el HttpContext.User se encuentra en un estado extraño . Una vez que ocurre la redirección, debido a que es una nueva solicitud del navegador, la cookie se leerá antes de llegar a su página y crear el objeto de usuario correcto.

Las cookies solo se configuran en el navegador después de completar una solicitud.

Como parte, RedirectFromLoginPage crea una cookie de autenticación de formularios de todos modos, no es necesario hacerlo manualmente.