PDA

Ver la Versión Completa : Login en delphi


camiz
04-04-2012, 06:07:11
Hola amigos nuevamente por aqui, buscando ayuda nesecito hacer un Login para el ingreso a una aplicacion con base de datos firebird he probado varios metodos y no funciona, la base de datos es firebird y consta asi.


CREATE TABLE USUARIO
(
CODUSUARIO Integer NOT NULL,
NOMBRE Char(50),
DIRECCION Char(70),
USUARIO Char(20) NOT NULL,
CLAVE Char(20) NOT NULL,
PRIMARY KEY (CODUSUARIO)
);





lo que quiero es validar el Usuario y clave para luego ingresar al sistema he estado probando este codigo con la ayuda de unos Tutoriales
pero no funciona.
la consulta del IBQuery es esta

select CODUSUARIO, USUARIO, CLAVE from USUARIO WHERE CODUSUARIO=:USER

begin
frmConeccion.Login.Params.ParamByName('USER').Value:= txt_usuario.Text;
frmConeccion.Login.Active:= True;
If frmConeccion.Login.RecordCount < 1 then
begin
Cuenta := Cuenta + 1;
Application.MessageBox('Usuario no encontrado', 'Atención', MB_ICONINFORMATION or MB_OK);
txt_usuario.Text := '';
txt_clave.Text := '';
frmConeccion.Login.Active := False;
If Cuenta = 3 then Close;
end
else
If txt_clave.Text = frmConeccion.LoginCLAVE.AsString then
Begin
frmPrincipal.Show;
frmConeccion.Login.Active := False;
frmLogin.Visible:= False;
end
else
begin
Cuenta := Cuenta + 1;
Application.MessageBox('Clave incorrecta, intente de nuevo', 'Atención', MB_ICONERROR or MB_OK);
txt_clave.Text := '';
frmConeccion.Login.Active := False;
If Cuenta = 3 then Close;
end;



a ver si me dan una manito se lo agradecere.

ElDioni
04-04-2012, 11:19:41
Hola,

¿pero donde falla?, ¿cual es el error que te lanza?, haz una ejecución paso a paso y ve comprobando el valor de los objetos para saber si están rellenos adecuadamente o si rescatan bien la información de la tabla.

Saludos.

duilioisola
04-04-2012, 13:02:34
Primero, como dijo el compañero:

¿Cuál es el error que te da?
¿En qué línea?

Solo un detalle:
Estos campos creo que deberían ser de tipo VARCHAR.

USUARIO VARCHAR(20) NOT NULL,
CLAVE VARCHAR(20) NOT NULL,

De lo contrario se rellenaran con espacios hasta llegar a 20 caracteres y la comparación podría fallar.
'ADMIN____________________' <> 'ADMIN'

camiz
04-04-2012, 18:55:12
el error era que la clave era incorrecta,

pero gracias a tu observacion he cambiado "CHAR" por "VARCHAR" y funciona muy bien

Gracias mi estimado duilioisola por tu aporte, el problema està resuelto.

mamcx
04-04-2012, 19:06:22
Ese metodo de login es inseguro. Se presta para una inyección de sql:

http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL

http://imgs.xkcd.com/comics/exploits_of_a_mom.png

Ademas, es mejor guardar las claves como un hash, e implementar el login con un procedimiento almacenado, o en su defecto, usar sustitución de parámetros:

http://mc-computing.com/databases/Delphi/Firebird/SQL.html#parameters


SELECT * FROM MATABLE
WHERE MT_ID IN (:MYPARAM)



Al menos hasta aqui es un buen primer intento para una app local, monousuario. Si es una app web o la BD se expone en una red amplia es mejor implementar un esquema mas seguro...