Autenticación de formularios: muestra la información del usuario que ha iniciado sesión en FormView utilizando el origen de datos del objeto

StackOverflow https://stackoverflow.com/questions/1619938

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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top