none
controles de usuario para usuario personalizado RRS feed

  • Pregunta

  • Hola Amigos,

    Tengo todo implementado para usar un usuario suscrito personalizado, pero ahora tengo el siguiente problema.

    No entiendo como usar los controles de "Inicio de Sesíon" que trae visual web developer!.

    Por ejemplo, en mi pagina de login tengo agregado un controlo de login y me tira el siguienter error:

    "Descripción: Error durante el procesamiento de un archivo de configuración requerido para dar servicio a esta solicitud. Revise los detalles de error específicos siguientes y modifique el archivo de configuración en consecuencia.

    Mensaje de error del analizador: Hashed or Encrypted passwords are not supported with auto-generated keys.

    Error de código fuente:

    Línea 71:           <add
    Línea 72:             name="OdbcProvider"
    Línea 73:             type="Samples.AspNet.Membership.OdbcMembershipProvider"
    Línea 74:             connectionStringName="LocalSqlServer"
    Línea 75:             enablePasswordRetrieval="true"


    Supongo que tengo que cambiar alguna configuracion en el web.config por las dudas le pongo el codigo que agregue en el web.config, para que vean si me falta algo o tengo algo mal.

    <providers>
    
              <add
                name="OdbcProvider"
                type="Samples.AspNet.Membership.OdbcMembershipProvider"
                connectionStringName="LocalSqlServer"
                enablePasswordRetrieval="true"
                enablePasswordReset="true"
                requiresQuestionAndAnswer="true"
                writeExceptionsToEventLog="true" />
                
            </providers>
    Espero que alguien me pueda ayudar!.

    Muchas gracias.

    Saludos,

    Luispa
    domingo, 6 de diciembre de 2009 22:44

Respuestas

  • hola

    segun veo estas implementando lo comentado en este link

    Sample Membership Provider Implementation

    y ademas imagino que habras creado esta clase

    How to: Sample Membership Provider Implementation


    Si analizas el codigo del segundo link veras una linea que dice

    Throw New ProviderException("Hashed or Encrypted passwords " & _
                                          "are not supported with auto-generated keys.")



    bien esto indica que necesitas en el web.config, la seccion

    <machineKey
          validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
          decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
          validation="SHA1" />



    esta tratando de leerla y no puede por eso muestra ese mensaje.

    si analizas los links que te dejo encontraras esta info


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Luispa martes, 15 de diciembre de 2009 0:14
    domingo, 6 de diciembre de 2009 22:55

Todas las respuestas

  • hola

    segun veo estas implementando lo comentado en este link

    Sample Membership Provider Implementation

    y ademas imagino que habras creado esta clase

    How to: Sample Membership Provider Implementation


    Si analizas el codigo del segundo link veras una linea que dice

    Throw New ProviderException("Hashed or Encrypted passwords " & _
                                          "are not supported with auto-generated keys.")



    bien esto indica que necesitas en el web.config, la seccion

    <machineKey
          validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
          decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
          validation="SHA1" />



    esta tratando de leerla y no puede por eso muestra ese mensaje.

    si analizas los links que te dejo encontraras esta info


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta Luispa martes, 15 de diciembre de 2009 0:14
    domingo, 6 de diciembre de 2009 22:55
  • Hola Leandro,

    Gracias a tu respuesta pude solucionar ese error, pero ahora cuando intento hacer login con cualquier usuario me aparece el siguiente:


    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

    Detalles de la excepción: System.Configuration.Provider.ProviderException: An exception occurred. Please check the Event Log.

    Error de código fuente:

    Línea 1293:                    WriteToEventLog(e, "ValidateUser");
    Línea 1294:
    Línea 1295:                    throw new ProviderException(exceptionMessage);
    Línea 1296:                }
    Línea 1297:                else

    Archivo de origen: c:\Users\Luis\Documents\Visual Studio 2008\WebSites\sitionet\App_Code\OdbcMembershipProvider.cs    Línea: 1295

    Espero que este sea el ultimo error!

    Bueno, espero que me puedas ayudar!

    En caso contrario igual te voy a dar por valida la respuesta.

    Muchas gracias.

    Saludos,

    Luispa


    lunes, 7 de diciembre de 2009 2:12
  • hola

    segun puedo ver el problema se presenta cuando uss esta funcion

        public override bool ValidateUser(string username, string password)
        {
          bool isValid = false;

          OdbcConnection conn = new OdbcConnection(connectionString);
          OdbcCommand cmd = new OdbcCommand("SELECT Password, IsApproved FROM Users " +
                  " WHERE Username = ? AND ApplicationName = ? AND IsLockedOut = False", conn);

          cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;

          OdbcDataReader reader = null;
          bool isApproved = false;
          string pwd = "";

          try
          {
            conn.Open();

            reader = cmd.ExecuteReader(CommandBehavior.SingleRow);

            if (reader.HasRows)
            {
              reader.Read();
              pwd = reader.GetString(0);
              isApproved = reader.GetBoolean(1);
            }
            else
            {
              return false;
            }

            reader.Close();

            if (CheckPassword(password, pwd))
            {
              if (isApproved)
              {
                isValid = true;

                OdbcCommand updateCmd = new OdbcCommand("UPDATE Users SET LastLoginDate = ?" +
                                                        " WHERE Username = ? AND ApplicationName = ?", conn);

                updateCmd.Parameters.Add("@LastLoginDate", OdbcType.DateTime).Value = DateTime.Now;
                updateCmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
                updateCmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;

                updateCmd.ExecuteNonQuery();
              }
            }
            else
            {
              conn.Close();

              UpdateFailureCount(username, "password");
            }
          }
          catch (OdbcException e)
          {
            if (WriteExceptionsToEventLog)
            {
              WriteToEventLog(e, "ValidateUser");

              throw new ProviderException(exceptionMessage);
            }
            else
            {
              throw e;
            }
          }
          finally
          {
            if (reader != null) { reader.Close(); }
            conn.Close();
          }

          return isValid;
        }


    mas puntualmente donde marque en negrita
    en realidad habria que ver cual es presisamente la descripcion del error, por ahi es que no puede conectar a la db

    pero para saberlo deberas controlar el error
    esto lo logras si declaras un try..catch cuando invocas a esta funcion
    digo si tienes un boton de login podrias hacer


    private void btnLogin_Click(....)
    {
         try
         {
             //aqui iria la invocacion a la funcion ValidateUser()
          }
          catch(Exception ex)
          {
              lblMensaje.Text = ex.Messaje;
          }
    }


    entonces cuando se produce el error la descripcion del mismo sera mostrado en un label que has puesto en la apgina de login para poder visualizarlo

    Igualmente revisa si no es un tema con la conexion a la base de datos

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 7 de diciembre de 2009 3:40
  • Hola Leandro,

    Gracias por responder, yo tambien pienso que es un problema de la conexion a la base de datos y seguramente hay algo en el web.config que esta mal o me falta.

    Te muestro lo que tengo en el web.config, para ver si me indicas cual es mi error.

    <configuration>
    
    
        <configSections>
          <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
              <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
              <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
                <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
              </sectionGroup>
            </sectionGroup>
          </sectionGroup>
        </configSections>  
    
    
        <appSettings/>
      <location path="CreateUser.aspx">
        <system.web>
          <authorization>
            <allow users="?" />
          </authorization>
        </system.web>
      </location>
      <location path="RetrievePassword.aspx">
        <system.web>
          <authorization>
            <allow users="?" />
          </authorization>
        </system.web>
      </location>
      
        <connectionStrings>
            <remove name="LocalSqlServer" />
            <add name="LocalSqlServer" connectionString="Data Source=INTERNET;Initial Catalog=salvay;Integrated Security=True" />
            <add name="OdbcServices" connectionString="Data Source=INTERNET;Initial Catalog=salvay;Integrated Security=True;" />
            <add name="salvayConnectionString" connectionString="Data Source=INTERNET;Initial Catalog=salvay;Integrated Security=True"
                providerName="System.Data.SqlClient" />
    
        </connectionStrings>
        <system.web>
         
            <roleManager enabled="true" />
            <compilation debug="true">
    
              
    
              <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
              </assemblies>
    
            </compilation>
                 
          <authentication mode="Forms" >
          <forms loginUrl="login.aspx"
            name=".ASPXFORMSAUTH" />
        </authentication>
               
          <machineKey
          validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
          decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
          validation="SHA1" />
    
          <membership defaultProvider="OdbcProvider" userIsOnlineTimeWindow="15">
    
            <providers>
    
              <add
                name="OdbcProvider"
                type="Samples.AspNet.Membership.OdbcMembershipProvider"
                connectionStringName="OdbcServices"
                enablePasswordRetrieval="true"
                enablePasswordReset="true"
                requiresQuestionAndAnswer="true"
                writeExceptionsToEventLog="true" />
                
            </providers>
          </membership>
    
          <profile>
            <properties>
              <add name="Nombre"/>
              <add name="Apellido"/>
              <add name="Direccion"/>
              
            </properties>
          </profile>
              
          <pages>
            <controls>
              <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
              <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </controls>
          </pages>
    
          <httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
          </httpHandlers>
          <httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          </httpModules>
    
          
        </system.web>
    
        <system.codedom>
          <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
                      type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
              <providerOption name="CompilerVersion" value="v3.5"/>
              <providerOption name="WarnAsError" value="false"/>
            </compiler>
            <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4"
                      type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
              <providerOption name="CompilerVersion" value="v3.5"/>
              <providerOption name="OptionInfer" value="true"/>
              <providerOption name="WarnAsError" value="false"/>
            </compiler>
          </compilers>
        </system.codedom>
        
            <system.webServer>
          <validation validateIntegratedModeConfiguration="false"/>
          <modules>
            <remove name="ScriptModule" />
            <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          </modules>
          <handlers>
            <remove name="WebServiceHandlerFactory-Integrated"/>
            <remove name="ScriptHandlerFactory" />
            <remove name="ScriptHandlerFactoryAppServices" />
            <remove name="ScriptResource" />
            <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
                 type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
                 type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
          </handlers>
        </system.webServer>
    
        <runtime>
          <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
              <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
              <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
            </dependentAssembly>
            <dependentAssembly>
              <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
              <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
            </dependentAssembly>
          </assemblyBinding>
        </runtime>
    
    
    </configuration>
    

    Bueno, tambien te comento que estoy usando un control de loguin predeterminado por .net, por las dudas que tenga que usar uno distinto.

    Pero seguro es algo en la cadena de conexion de la base de datos.

    Espero que me puedas ayudar como siempre!

    Un abrazo y muchas gracias por todas las respuestas!

    Igualmente te dare como valida la respuesta cuando terminemos.

    Saludos.

    Luispa
    lunes, 7 de diciembre de 2009 13:18
  • hola

    segun veo el membership esta usndo la conexion

    connectionStringName="OdbcServices"

    o sea esta parte
    <add name="OdbcServices" connectionString="Data Source=INTERNET;Initial Catalog=salvay;Integrated Security=True;" />

    pero me llama la atencion ya que no pareciera estar incorrecta, la db es sql server ?

    porque esta marcada como odbc, sino usa odbc para conectarse ?


    veo qeu como data source dice INTERNET, pero hay un servicio de base de datos con ese nombre ?

    prueba crear un archivo .udl para testear la conexion desde la pc donde intentas correr la aplciacion

    Creating and Configuring Universal Data Link (.udl) Files


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 7 de diciembre de 2009 17:50
  • Hola Leandro,

    Gracias de nuevo, pero sigo sin poder solucionar este error.

    Tengo algunas dudas, yo tengo solamente dos clases creadas, "OdbcMembershipProvider y OdbcMembershipUser", pero veo en esta pagina http://msdn.microsoft.com/es-ar/library/44w5aswa.aspx que aparte de crear la tabla de usuarios personalizada, parece que tengo que crear un "acceso al registro de eventos y un proveedor de ejemplo". Será esto lo que me esta faltando??

    Tambien, no entiendo eso de OdbcService y OdbcProvider, ya que la conexión a mi base de datos es por SQL Server tal como lo ves en el web.config

    Esta es la cadena de conexion que funciona correctamente con el proveedor por defecto que trae .net "LocalSqlServer" connectionString="Data Source=INTERNET;Initial Catalog=salvay;Integrated Security=True" />" por eso la copie exactamente igual en la cadena de "OdbcService" del web.config

    Espero que con estos datos me puedas salvar y desburrar!!

    Muchas gracias amigo!!

    Saludos.

    Luispa
    lunes, 7 de diciembre de 2009 19:20
  • Leandro,

    Sos el unico que me puede ayudar, estoy muy trabado con esto!!

    Espero que vuelvas a contestarme, porque necesito terminar de solucionar esto y no puedo.

    Muchas gracias!!

    Un abrazo.

    Luispa

    jueves, 10 de diciembre de 2009 17:47