none
URGENTE ..Realizar un login y un registro de usuarios personalizados RRS feed

  • Pregunta

  • Buenas Tardes por favor necesito la ayuda URGENTE, Estoy realizando una aplicacion que necesito el login, yo utilizo asp.net mvc 2 y sql server 2008. Lo que necesito como puedo realizar un login personalizado y un registro de usuarios que me utilece mi propia base de datos. Yo he mirando mucho pero no he podido realizar por siempre me quedo atracando en unos pasos a la hora de realizar proveedores personalizados..

    Gracias !! 

    viernes, 7 de mayo de 2010 22:41

Todas las respuestas

  • Buenas, Carlos.

    La implementación de proveedores personalizados es idéntica a ASP.NET tradicional, por lo que encontrarás por ahí muchos ejemplos. Sin ir más lejos, en el mismo MSDN hay una implementación completa sobre una base de datos ODBC. En resumen, basta con heredar de MembershipProvider e implementar los métodos y propiedades que vayas a necesitar (que no son necesariamente todos).

    Si estás intentándolo y tienes algún problema concreto, puedes escribirlo por aquí (o en los foros de ASP.NET, es un tema común), a ver si te podemos echar una mano.

    Otra posibilidad que podrías considerar al utilizar SQL Server 2008, es crear sobre tu base de datos la infraestructura de datos del proveedor estándar (AspNetSqlMembershipProvider), utilizando para ello la herramienta "aspnet_regsql.exe" que encontrarás en la carpeta del framework (puedes encontrar información sobre su uso en http://msdn.microsoft.com/es-es/library/ms229862(VS.80).aspx).

    Si te vale esta solución, sólo tendrías que retocar ligeramente la cadena de conexión en el web.config para que la propuesta de membresía de las plantillas de ASP.NET MVC te sirviera directamente.

    Un saludo & suerte.


    José M. Aguilar
    Variable not found
    domingo, 9 de mayo de 2010 19:10
  • Buenas Jose, Gracias por responder.

    Pero necesito mucha ayuda...


    Realizo el ejemplo que me paso http://msdn.microsoft.com/es-ar/library/6tc47t75.aspx de este modifico el metodo Create user y me aparece el siguiente error: Una pregunta primero ¿ Yo donde deberia colocar este archivo, en asp.net mvc2??

    Error 1 'MvcApplication1.OdbcMembershipProvider.CreateUser(string, string, string, string, bool, object, out System.Web.Security.MembershipCreateStatus)': no se encontró ningún miembro adecuado que invalidar C:\...\Studio 2008\Projects\MvcApplication1\MvcApplication1\OdbcMembershipProvider.cs 367 36 MvcApplication1


    //
      // MembershipProvider.CreateUser
      //
    
      public override MembershipUser CreateUser(string usu_username,
           string usu_contrasena,
           string usu_nombres,
           string usu_apellidos,
           bool isApproved,
           object providerUserKey,
           out MembershipCreateStatus status)
      {
       ValidatePasswordEventArgs args = 
        new ValidatePasswordEventArgs(usu_username, usu_contrasena, true);
    
       OnValidatingPassword(args);
    
       if (args.Cancel)
       {
        status = MembershipCreateStatus.InvalidPassword;
        return null;
       }
    
    
    
       if (RequiresUniqueEmail && GetUserNameByEmail(usu_nombres) != "")
       {
        status = MembershipCreateStatus.DuplicateEmail;
        return null;
       }
    
       MembershipUser u = GetUser(usu_username, false);
    
       if (u == null)
       {
        DateTime createDate = DateTime.Now;
    
        if (providerUserKey == null)
        {
         providerUserKey = Guid.NewGuid();
        }
        else
        {
         if ( !(providerUserKey is Guid) )
         {
          status = MembershipCreateStatus.InvalidProviderUserKey;
          return null;
         }
        }
    
        OdbcConnection conn = new OdbcConnection(connectionString);
        OdbcCommand cmd = new OdbcCommand("INSERT INTO usuarios " +
           " (usu_id, usu_nombres, usu_apellidos, usu_activo, usu_hd_usuario, " +
           " car_id, are_id,usu_username, usu_contrasena,IsApproved)" +
           " Values(?, ?, ?, ?, ?, ?, ?, ?, ?,?)", conn);
    
        cmd.Parameters.Add("@usu_id", OdbcType.Int).Value = providerUserKey;
        cmd.Parameters.Add("@usu_nombres", OdbcType.VarChar, 25).Value = usu_nombres;
        cmd.Parameters.Add("@usu_apellidos", OdbcType.VarChar, 50).Value = usu_apellidos;
        cmd.Parameters.Add("@usu_activo", OdbcType.TinyInt).Value = 1;
        cmd.Parameters.Add("@usu_hd_usuario", OdbcType.Int).Value = 1;
        cmd.Parameters.Add("@car_id", OdbcType.Int).Value = 1;
        cmd.Parameters.Add("@are_id", OdbcType.Int).Value = 1;
        cmd.Parameters.Add("@usu_username", OdbcType.VarChar, 50).Value = usu_username;
        cmd.Parameters.Add("@usu_contrasena", OdbcType.VarChar, 50).Value = EncodePassword(usu_contrasena);    
        cmd.Parameters.Add("@IsApproved", OdbcType.Bit).Value = isApproved;
    
        try
        {
         conn.Open();
    
         int recAdded = cmd.ExecuteNonQuery();
    
         if (recAdded > 0)
         {
          status = MembershipCreateStatus.Success;
         }
         else
         {
          status = MembershipCreateStatus.UserRejected;
         }
        }
        catch (OdbcException e)
        {
         if (WriteExceptionsToEventLog)
         {
          WriteToEventLog(e, "CreateUser");
         }
    
         status = MembershipCreateStatus.ProviderError;
        }
        finally
        {
         conn.Close();
        }
    
    
        return GetUser(usu_username, false);   
       }    
       else
       {
        status = MembershipCreateStatus.DuplicateUserName;
       }
    
    
       return null;
      }
    Tambien realizo el archivo config.web de esta pagina http://msdn.microsoft.com/es-ar/library/44w5aswa.aspx y me queda asi 

    <?xml version="1.0"?>
    <!-- 
      Note: As an alternative to hand editing this file you can use the 
      web admin tool to configure settings for your application. Use
      the Website->Asp.Net Configuration option in Visual Studio.
      A full list of settings and comments can be found in 
      machine.config.comments usually located in 
      \Windows\Microsoft.Net\Framework\v2.x\Config 
    -->
    <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/>
    
     <connectionStrings>
      <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
       providerName="System.Data.SqlClient" />
      <add name="SIGACUNConnectionString" connectionString="Data Source=BCCOMPUTO17\sqlexpress;Initial Catalog=SIGACUN;Integrated Security=True"
       providerName="System.Data.SqlClient" />
     </connectionStrings>
    
     <system.web>
    
      <!-- 
          Set compilation debug="true" to insert debugging 
          symbols into the compiled page. Because this 
          affects performance, set this value to true only 
          during development.
      -->
      <compilation debug="false">
       <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.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Mvc, Version=2.0.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"/>
        <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
       </assemblies>
      </compilation>
    
      <!--
          The <authentication> section enables configuration 
          of the security authentication mode used by 
          ASP.NET to identify an incoming user. 
      -->
      <authentication mode="Forms">
       <forms loginUrl="~/Account/LogOn" timeout="2880" />
      </authentication>
    
      <membership defaultProvider="OdbcMembershipProvider" userIsOnlineTimeWindow="15">
       <providers>
        <clear/>
        <add name="SqlMembershipProvider"
           type="System.Web.Security.OdbcMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
           connectionStringName="SIGACUNConnectionString"
           enablePasswordRetrieval="false"
           enablePasswordReset="true"
           requiresQuestionAndAnswer="false"
           requiresUniqueEmail="false"
           passwordFormat="Hashed"
           maxInvalidPasswordAttempts="5"
           minRequiredPasswordLength="6"
           minRequiredNonalphanumericCharacters="0"
           passwordAttemptWindow="10"
           passwordStrengthRegularExpression=""
           applicationName="/"
            />
       </providers>
      </membership>
    
      <profile>
       <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider"
           type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
           connectionStringName="ApplicationServices"
           applicationName="/"
           writeExceptionsToEventLog="false"
            />
       </providers>
      </profile>
    
      <roleManager enabled="false">
       <providers>
        <clear />
        <add connectionStringName="ApplicationServices" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
       </providers>
      </roleManager>
    
      <!--
          The <customErrors> section enables configuration 
          of what to do if/when an unhandled error occurs 
          during the execution of a request. Specifically, 
          it enables developers to configure html error pages 
          to be displayed in place of a error stack trace.
    
        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
          <error statusCode="403" redirect="NoAccess.htm" />
          <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
      -->
    
      <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>
    
       <namespaces>
        <add namespace="System.Web.Mvc"/>
        <add namespace="System.Web.Mvc.Ajax"/>
        <add namespace="System.Web.Mvc.Html"/>
        <add namespace="System.Web.Routing"/>
        <add namespace="System.Linq"/>
        <add namespace="System.Collections.Generic"/>
       </namespaces>
      </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"/>
       <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, 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>
    
    
     <!-- 
        The system.webServer section is required for running ASP.NET AJAX under Internet
        Information Services 7.0. It is not necessary for previous version of IIS.
     -->
     <system.webServer>
      <validation validateIntegratedModeConfiguration="false"/>
    
      <modules runAllManagedModulesForAllRequests="true">
       <remove name="ScriptModule" />
       <remove name="UrlRoutingModule" />
       <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
       <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </modules>
    
      <handlers>
       <remove name="WebServiceHandlerFactory-Integrated"/>
       <remove name="ScriptHandlerFactory" />
       <remove name="ScriptHandlerFactoryAppServices" />
       <remove name="ScriptResource" />
       <remove name="UrlRoutingHandler" />
       <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" />
       <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </handlers>
     </system.webServer>
    
     <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
       </dependentAssembly>
      </assemblyBinding>
     </runtime>
    
    </configuration>


    MUCHAS GRACIAS Y QUE PENA POR LA MOLESTIA, YO SOY NUEVO EN ASP.NET.
    lunes, 10 de mayo de 2010 16:29
  • Hola Carlos, 

                     Pudiste avanzar con el tema del manejo de usuarios para tu aplicación..es un tema que requiere un cierto análisis y consideración..nose por eso te pregunto el estatus del mismo..

     

    Saludos,

    Kili

    viernes, 21 de mayo de 2010 12:07
  • Kilisoria, No he podido avanzar en el tema!! por favor pido ayuda
    viernes, 21 de mayo de 2010 13:49
  • Hola,

    Es dificil responderte con el código que has puesto... podrías enviar el código zip del proyecto en vs??? Así le podemos echar un vistazo y ver que pasa... :)

    Saludos!

    miércoles, 26 de mayo de 2010 7:16