lunes, julio 16, 2007

Control Login usando MySQL

Estuve el fin de semana haciendo diversas pruebas con el control login de asp.net, primero que nada la verdad es que el membership provider de microsoft, estará muy fácil de instalar y usar pero esta muy limitado, necesitas montar toda la aplicacion alrededor de las tablas que microsoft decide para la administración de los usuarios, aún cuando la estructura es buena, en muchas ocasiones esa misma tabla tiene que llevar otro tipo de información, pude haber hecho una tabla que se manejara de forma paralela para el resto de la información de estos usuarios, pero uno es necio de verdad, lo que quiero es usar mi tabla, además quiero que este en mysql (solo me falta que me ponga otra vez de necio y montar la aplicación sobre linux).

Lo primero fue crear mi tabla en mysql, solo pondré la estructura necesaria para el ejemplo:

CREATE TABLE `medicos` (
`IDMedico` int(10) NOT NULL auto_increment,
`Titulo` varchar(50) character set latin1 default NULL,
`Nombre` varchar(50) character set latin1 default NULL,
`ApellidoPaterno` varchar(50) character set latin1 default NULL,
`ApellidoMaterno` varchar(50) character set latin1 default NULL,
`Email` varchar(50) character set latin1 default NULL,
`Password` varchar(50) character set latin1 NOT NULL default '0',
PRIMARY KEY (`IDMedico`),
KEY `Password` (`Password`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=2 ;

CREATE TABLE

En esta ocasión decidí conectarme a MySQL mediante el connector de .Net (funciona mejor que el ByteFX) las instrucciones para instalar este componente estan en http://dev.mysql.com/downloads/connector/net/. El namespace de este componente es MySql.Data.MySqlClient, la cual tenemos que agregar como una referencia al proyecto en el que estamos, en realidad no se porque esto no se dio de manera automática cuando realice la instalación, pero lo resolví agregándolo.




A continuación creamos un archivo con una clase para la autenticación de los usuarios:

Imports Microsoft.VisualBasic
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports MySql.Data.MySqlClient


Public Class AutenticarMedico
Public Function Autenticar(ByVal username As String, ByVal password As String) As Boolean
Dim conn As New MySqlConnection
Dim myCommand As New MySqlCommand
Dim myAdapter As New MySqlDataAdapter
Dim myData As New Data.DataTable
Dim SQL As String
Dim opcion As Boolean


SQL = "SELECT * FROM Medicos WHERE username='" + username + "' AND Password='" + password + "';"

conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("emConnectionString").ConnectionString

conn.Open()

myCommand.Connection = conn
myCommand.CommandText = SQL

myAdapter.SelectCommand = myCommand
myAdapter.Fill(myData)

If (myData Is DBNull.Value Or myData.Rows.Count > 0) Then
opcion = True
Else
opcion = False
End If

conn.Close()
Return opcion
End Function
End Class

Guardamos nuestro archivo anterior. Creamos uno nuevo con extensión aspx, es decir un web form, agregamos el control Login de nuestra caja de herramientas, opcionalmente le damos algún formato, escogemos el control para agregarle el método on_authenticate el cual en lugar de irse a membership como omisión tendría que realizar la comprobación hacia nuestro mysql mediante las siguientes instrucciones:

Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs)
Dim verificarUsuario As New AutenticarMedico
Dim usuario As String = Login1.UserName
Dim password As String = Login1.Password
Dim resultado As Boolean

resultado = verificarUsuario.Autenticar(usuario, password)

e.Authenticated = resultado

End Sub

A continuación una breve video en youtube:


Como resultado tenemos el control en una pagina que se autentifica contra la base de datos de mysql.
Listo!

6 comentarios:

Patrik dijo...

Me ayudo mucho. Saludos y gracias

Anónimo dijo...

como hago para mandar a otro sormulario si la comprobacion es correcta

vgarcias dijo...

Debes configurar correctamente los parametros del archivo web.config de tu aplicacion web. En especial el atributo de defaultUrl.

Anónimo dijo...

oye... sera que puedes publicar el proyecto (sln) o las paginas..

es que me sale error en esta linea.

BC30456: 'Password_TextChanged' is not a member of 'ASP.login_aspx'.

se lo agradeceria..
y pues me urge su pronta respuesta

Anónimo dijo...

un favor sera que el ejemplo lo puedes hacer para postgres...es que me presentan alguunos inconvenientes

gracias

Anónimo dijo...

esta bueno, me sirvio gracias, lo unico malo que veo es que guardas la contraseña en texto plano en la base de datos , y tambien podrias usar un stored procedure para evitar sql injection.
Saludos