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:
- <asp:CreateUserWizard ID="CreateUserWizard1" runat="server">
- <WizardSteps>
- <asp:CreateUserWizardStep runat="server">
- </asp:CreateUserWizardStep>
- <asp:CompleteWizardStep runat="server">
- </asp:CompleteWizardStep>
- </WizardSteps>
- </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:
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:
- <codeSubDirectories>
- <add directoryName="VBCode" />
- <add directoryName="CSCode" />
- </codeSubDirectories>
Ahora sí, has terminado, todo debe funcionar correctamente.
Por si acaso, aquí están los archivos:
- Archivos fuente en CS
- Archivo SQL para crear tablas
- Archivo Web.config (sin los cambios para soportar dos lenguajes distintos)
- MySQL Membership and Role Providers.dll (aunque lee bien este post, te recomiendo mejor la opción de trabajar con los archivos fuente)
- MySql.Data.Dll (para poner en la carpeta bin)
he estado buscando en el msdn el atributo encryptionKey para el elemento secundario
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.
SEgui todo al pie de la letra pero me fue imposible concluir algunos pasos para poder hacer todo. Hay alguna forma que me puedas ayudar? Gracias
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!