Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   .NET (http://www.forosdelweb.com/f29/)
-   -   Problema con Loggin usuarios en ASP.NET (me urge mucho) (http://www.forosdelweb.com/f29/problema-con-loggin-usuarios-asp-net-urge-mucho-548936/)

Ciberyo 17/01/2008 02:40

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>



La zona horaria es GMT -6. Ahora son las 10:05.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.