Microsoft provee un MembershipProvider y RoleProvider en el Framework de ASP.NET, pero solamente funcionan para SQL Server.

Afortunadamente Rakotomalala Andriniaina se dió a la tarea de escribir ambos Providers para que se conecten a MySQL, y así poder usar toda la funcionalidad de Autenticación de ASP.NET 2 con esta base de datos.

Entra a:

http://makoto.madmedia.ca/2007/03/mysql-membership-and-role-provider-for.html

y descarga el archivo Release.zip.

Copia el fólder bin en la raíz de tu aplicación.

Crea tu base de datos en MySQL, y genera las tablas utilizando el archivo create_tables.sql. Deberán haberse creado tres tablas: roles, users y usersinroles.

Nota:
También necesitarás el Connector/Net 1.0. Solamente descárgalo e instálalo en el servidor donde corre la aplicación.

Abre el archivo web.config que viene en la liga anterior y copia las líneas que ahí aparecen al web.config de tu aplicación.

Recuerda modificar los valores del connectionString por los tuyos.

También modifica el valor YOURAPPNAME por el nombre de tu aplicación (el que tú eligas). Aparece dos veces.

Si quieres puedes modificar el valor de encryptionKey por un número hexadecimal de tu elección, pero si no sabes lo que estás haciendo mejor déjalo así.

Es muy importante que modifiques el valor de loginUrl en el nodo forms. Coloca la ruta de tu página de Login. Recuerda que la tilde ~ significa la raíz de tu aplicación.

Ahora ya está todo listo. Ya puedes usar los componentes de Autenticación de ASP.NET 2 (Login, LoginView, PasswordRecovery, LoginStatus, LoginName, CreateUserWizard, ChangePassword) con MySQL.

Para probar que todo está funcionando correctamente, crea tu página de Login y coloca un control CreateUserWizard básico:

  1. <asp:CreateUserWizard ID="CreateUserWizard1" runat="server">
  2.     <WizardSteps>
  3.         <asp:CreateUserWizardStep runat="server">
  4.         </asp:CreateUserWizardStep>
  5.         <asp:CompleteWizardStep runat="server">
  6.         </asp:CompleteWizardStep>
  7.     </WizardSteps>
  8. </asp:CreateUserWizard>

Si necesitas utilizar autenticación por roles, lee este post.

Actualización

Todo funcionó perfectamente como lo describí en este post en mi servidor de pruebas, pero en mi servidor de producción, el cual tiene exactamente la misma configuración, me marcaba este error:

Parser Error Message: Could not load type 'Andri.Web.MySqlRoleProvider'.

Revisé todas las configuraciones y no encontré nada, todo estaba bien. Entonces procedí a hacer esto de otra manera porque ya tenía otro proyecto trabajando igual, así que esta es una solución comprobada:

No muevas nada de la configuración del MembershipProvider que hayas hecho en el web.config, eso sigue estando bien.

Del fólder bin elimina la librería MySQL Membership and Role Providers.dll. No elimines MySql.Data.Dll.

Ahora bien, como ya no tenemos la librería usaremos los archivos fuente que Rakotomalala escribió en C#. Si estás haciendo toda tu aplicación en ese lenguaje, simplemente coloca los archivos MySQLMembershipProvider.cs y MySQLRoleProvider.cs en tu carpeta App_Code y listo, ahora sí funcionará todo como debe ser.

Pero si estás usando VB:

Si estás haciendo tu aplicación en VB entonces no puedes simplemente colocar los archivos mencionados anteriormente en tu carpeta App_Code porque si tienes dos lenguajes tienes que colocarlos en carpetas distintas. Crea dos carpetas, una para cada lenguaje, de tal forma que tengas esto:

Dos lenguajes

Ahora bien, coloca dentro de VBCode todos tus archivos fuente VB y dentro de CSCode todos tus archivos fuente C#.

No has terminado, porque le tienes que indicar a la aplicación lo que estás haciendo. Abre tu archivo web.config y dentro del nodo compilation coloca lo siguiente:

  1. <codeSubDirectories>
  2.   <add directoryName="VBCode" />
  3.   <add directoryName="CSCode" />
  4. </codeSubDirectories>

Ahora sí, has terminado, todo debe funcionar correctamente.

Por si acaso, aquí están los archivos:

4 comentarios sobre “MembershipProvider y RoleProvider para MySQL para ASP.NET 2

  1. he estado buscando en el msdn el atributo encryptionKey para el elemento secundario add que pertenece a elemento membership y no aparece. Que hace tal atributo?. Gracias.

  2. Hola carlos, este post tiene mas de un año. Durante ese tiempo vimos la salida del SQL Server 2005. Hay una versión que se llama “Express”. No tiene costo. Te recomiendo dejar de lado el uso de MySQL para utilizar SQL Server 2005. En lo personal encontré que la integración con MySQL se puede hacer y funciona muy bien, pero requiere de mucho tuning para echarlo a andar. La integración de asp.net con SQL Server es directa y sin trucos escondidos.

    Suerte!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


ocho × = 56