Autenticación de formularios: muestra la información del usuario que ha iniciado sesión en FormView utilizando el origen de datos del objeto
-
06-07-2019 - |
Pregunta
En mi aplicación web, uso la autenticación de formularios con una cookie. En una página, deseo mostrar la información del usuario que ha iniciado sesión actualmente, dentro de un FormView con un ObjectDataSource. Mi fuente de datos tiene un método de selección que acepta como parámetro el nombre de usuario por el cual los datos del usuario se solicitarán a la base de datos. ¿Cómo obtengo el nombre de usuario para el usuario que ha iniciado sesión actualmente y lo uso como un parámetro de selección para la fuente de datos?
Solución 2
En cambio, elegí usar el evento de selección de la fuente de datos y agregar la información que necesitaba como parámetro de entrada.
Otros consejos
En Global.asax ... debes escribir:
protected void Application_AuthenticateRequest(object sender, EventArgs e) {
if (Request.PhysicalPath.EndsWith(".aspx") || Request.PhysicalPath.EndsWith(".axd"))
SecurityManager.SetPrincipal();
}
El método SecurityManager.SetPrincipal () debería tener el siguiente aspecto:
// variable we'll use to set HttpContext.Current.User
IPrincipal principal = null;
FormsIdentity identity;
//IsAuthenticated will be automatically set by .NET framework
if (HttpContext.Current.Request.IsAuthenticated)
{
// (FormsIdentity)HttpContext.Current.User.Identity will
// be filled automatically by the .NET framework when using forms authentication
identity = (FormsIdentity)HttpContext.Current.User.Identity;
// This User class must be defined BY YOU
User userProfile;
// this user data is the data that you entered when you created the ticket.
// this should be a security token that would allow you to GET THE USER FROM IT
String userData = (((FormsIdentity)identity).Ticket).UserData;
try
{
// UserHelper is a class that must be able to OBTAIN a USER given a SECURITY TOKEN.
// remember, you created this token when you created the ticket you used in the cookie.
userProfile = UserHelper.GetUser(userData);
// AuthenticatedPrincipal must implement IPrincipal. Consider deriving from GenericPrincipal.
// Your IPrincipal implementations must hold a reference to the UserClass you created
principal = new AuthenticatedPrincipal(identity, userProfile);
}
catch
{
FormsAuthentication.SignOut();
// This is analogous to AuthenticatedPrincipal
principal = new AnonymousPrincipal(new GuestIdentity(), UserHelper.GetUser(null));
}
}
else
{
principal = new AnonymousPrincipal(new GuestIdentity(), UserHelper.GetUser(null));
}
// Now we make our principal, that holds a reference to the currently
// logged user, globally visible
HttpContext.Current.User = principal;
Por lo que sé, ObjectDataSource le permite escribir una clase de capa de acceso a datos y asignar algunos métodos de esta clase a las operaciones de DataSource. Puede acceder a HttpContext.Current.User desde estos métodos.
Como dijiste que eres " En mi aplicación web, uso la autenticación de formularios con una cookie " ;. Supongo que usted sabe cómo " registrar " El usuario y enviar la cookie al navegador. Si tiene algún problema con eso, hágamelo saber.