Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con Loggin usuarios en ASP.NET (me urge mucho)

Estas en el tema de Problema con Loggin usuarios en ASP.NET (me urge mucho) en el foro de .NET en Foros del Web. Hola a todos, estoy haciendo una web en ASP.net y debe de restringir el acceso a contenido según el rol, en el código podéis ver ...
  #1 (permalink)  
Antiguo 17/01/2008, 02:40
 
Fecha de Ingreso: diciembre-2007
Mensajes: 36
Antigüedad: 16 años, 5 meses
Puntos: 0
Problema con Loggin usuarios en ASP.NET (me urge mucho)

Hola a todos, estoy haciendo una web en ASP.net y debe de restringir el acceso a contenido según el rol, en el código podéis ver que busco al usuario y compruebo que la contraseña coincida, el caso es que me devuelve el rol pero luego no me deja acceder a la sección que le correspondería

el código de la pagina de logueo es esta

Código:
using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;



public partial class Default2 : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {



    }

    protected void Button1_Click(object sender, EventArgs e)

    {

        if (txtuser.Text != "" & txtpass.Text != "")

        {

            string rol = IsAuthenticated(this.txtuser.Text, this.txtpass.Text);

                if (rol != "")

                {

                    FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, txtuser.Text, DateTime.Now, DateTime.Now.AddMinutes(30), false, rol);

                    //Encriptar el type

                    string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

                    //crear la coockie con el ticket cifrado

                    HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

                    //añadimos la cookie a la coleccion de cookies del navegador

                    Response.Cookies.Add(authCookie);

                    //Response.Redirect(FormsAuthentication.GetRedirectUrl(txtuser.Text, false));

                }

                else

                {

                    Response.Write("<script>alert('El usuario especificado no existe')</script>");

                }   

        }

        else

        {

            Response.Write("<script>alert('Tanto el nombre de usuario como al contraseña son obligatorios para loguearse')</script>");

        }

    }



    private string IsAuthenticated(string username, string password)

    {

        // Comprobamos que el usuario existe en nuestra base de datos y que la contraseña es la correcta

        SqlConnection objconectar = new SqlConnection(ConfigurationManager.ConnectionStrings["conexioncartelera"].ToString());

        //Abrimos la conexion

        objconectar.Open();

        //Creamos la variable tipo Command y le asignamos la consulta sql para que nos busque solo por el apellido asignado

        SqlCommand Consulta = new SqlCommand("SELECT rol from cliente Where idcliente=@pidcliente and pass=@ppass;", objconectar);

        Consulta.Parameters.Add("@pidcliente", SqlDbType.VarChar);

        Consulta.Parameters["@pidcliente"].Value = this.txtuser.Text;

        Consulta.Parameters.Add("@ppass", SqlDbType.VarChar);

        Consulta.Parameters["@ppass"].Value = this.txtpass.Text;

        //Ejecutamos la cosulta y la asignamos al lector.

        string rol = Convert.ToString(Consulta.ExecuteScalar());

        //Cerramos conexión y desechamos la variable

        objconectar.Close();

        objconectar.Dispose();

        return rol;



    }

}
el global asax

Código:
<%@ Application Language="C#" %>



<script runat="server">



    void Application_AuthentificateRequest(Object sender, EventArgs e)

    {

        //Extraer la autentificacion de la cookie

        string cookiename = FormsAuthentication.FormsCookieName;

        HttpCookie authcookie = Context.Request.Cookies[cookiename];

        //Compruebo que la cookie es valida

        if (null == authcookie)

        {

            return;



        }



        FormsAuthenticationTicket authTicket = null;



        try

        {

            authTicket = FormsAuthentication.Decrypt(authcookie.Value);

        }

        catch

        {

            //fallo al desencriptar

            return;



            if (null == authTicket)

            {

                return;

            }

        }



        //Una vez esta el ticket creada le asignamos los roles de usuario

        string[] roles = authTicket.UserData.Split(new char[] { '|' });

        

        //Crear el objeto identidad

        FormsIdentity id = new FormsIdentity(authTicket);

        System.Security.Principal.GenericPrincipal Principal = new System.Security.Principal.GenericPrincipal(id, roles);

        //añadir el objeto principal al actual httpcontext

        Context.User = Principal;

    }



    void Application_Start(object sender, EventArgs e)

    {

        // Código que se ejecuta al iniciarse la aplicación



    }





    void Application_End(object sender, EventArgs e)

    {

        //  Código que se ejecuta cuando se cierra la aplicación



    }



    void Application_Error(object sender, EventArgs e)

    {

        // Código que se ejecuta al producirse un error no controlado



    }



    void Session_Start(object sender, EventArgs e)

    {

        // Código que se ejecuta cuando se inicia una nueva sesión



    }



    void Session_End(object sender, EventArgs e)

    {

        // Código que se ejecuta cuando finaliza una sesión. 

        // Nota: El evento Session_End se desencadena sólo con el modo sessionstate

        // se establece como InProc en el archivo Web.config. Si el modo de sesión se establece como StateServer 

        // o SQLServer, el evento no se genera.



    }

       

</script>
el web.config de la zona libre

Código:
<?xml version="1.0"?>

<!-- 

    Nota: como alternativa para editar manualmente este archivo puede utilizar la 

    herramienta Administración de sitios Web para configurar los valores de la aplicación. Utilice

    la opción Sitio Web->Configuración de Asp.Net en Visual Studio.

    Encontrará una lista completa de valores de configuración y comentarios en 

    machine.config.comments, que se encuentra generalmente en 

    \Windows\Microsoft.Net\Framework\v2.x\Config 

-->

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

	<appSettings/>

	<connectionStrings>

    <!-- Aqui definimos la conexion con la bases de datos

        -->

  <add name="conexioncartelera" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=diaznoriega;Integrated Security=True;Pooling=False"

   providerName="System.Data.SqlClient" />

 </connectionStrings>

	<system.web>

    <httpRuntime useFullyQualifiedRedirectUrl="true" />

		<!-- 

            Establezca debug="true" en la compilación para insertar símbolos 

            de depuración en la página compilada. Dado que este 

            proceso afecta al rendimiento, debe establecer este valor como true 

            durante la depuración.

        -->

		<roleManager enabled="true" />

  <httpHandlers>

			<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>

		</httpHandlers>

		<compilation debug="true">

			<buildProviders>

				<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

			</buildProviders>

		</compilation>

		<!--

            La sección <authentication> permite configurar 

            el modo de autenticación de seguridad utilizado por 

            ASP.NET para identificar a un usuario entrante. 

     -->





    <authentication mode="Forms">

      <forms loginUrl="Logueo.aspx" name="AuthCookie" timeout="30" path="/">

      </forms>

    </authentication>

    <!--  Permito a todos los usuarios  -->

    <authorization>

      <allow users="*"/>

      </authorization>

		<!--

            La sección <customErrors> permite configurar 

            las acciones que se deben llevar a cabo/cuando un error no controlado tiene lugar

            durante la ejecución de una solicitud. Específicamente, 

            permite a los desarrolladores configurar p√°ginas de error html 

            que se mostrar√°n en lugar de un seguimiento de pila de errores.



        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">

            <error statusCode="403" redirect="NoAccess.htm" />

            <error statusCode="404" redirect="FileNotFound.htm" />

        </customErrors>

        -->

	</system.web>

</configuration>
y el web.config de una de las secciones (En este caso la de administrador)

Código:
<?xml version="1.0" encoding="utf-8"?>

<!-- Nota: como alternativa para editar manualmente este archivo puede utilizar la herramienta Administración de sitios Web para

     configurar los valores de la aplicación. Utilice la opción Sitio Web->Configuración de Asp.Net

     en Visual Studio.

    Encontrará una lista completa de valores de configuración y comentarios en machine.config.comments, que se encuentra

     generalmente en \Windows\Microsoft.NET\Framework\v2.0.xxxxx\Config

 -->

<configuration>

  <appSettings/>

  <connectionStrings/>

  <system.web>

    <authorization>

      <allow roles="administrador" />

      <deny users="*" />

    </authorization>

  </system.web>

</configuration>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:54.