PDA

Ver la Versión Completa : Comprobar contraseña


The Cid James
08-12-2017, 07:57:00
Tengo el siguiente codigo, la idea como el soft solo maneja una sola contraseña para la configuracion es solamente comprobar la contraseña para ello hice esto

procedure Tflogin.BloginClick(Sender: TObject);
var
contraseña2: string;
begin
fmodulo.qcontraseña.Active:= true;
if trim(ELcont.Text) = ''
then
ShowMessage('Por favor intruzca la contraseña de administracion')
else
contraseña2 := CalcHash2 (ELcont.Text, haMD5);
fmodulo.qcontraseña.Open;
if contraseña2 = fModulo.qcontraseña['pass']
then
showMessage('hola') //jamas entra aqui
else
//ShowMessage('chau');
Edit1.Text := contraseña2; // use esto para verificar si el hash coincide
end;

Por mas que el hash sea el mismo siempre me manda el else

aposi
09-12-2017, 15:59:47
if contraseña2 = fModulo.qcontraseña['pass'].value

jhonny
09-12-2017, 16:58:50
Si de pronto no es lo que señala aposi. Se me ocurre que quizá CalcHash2 esté devolviendo un espacio... quizá hay que aplicar Trim ahí. Si puedes poner el código de CalcHash2 a lo mejor podríamos probar el tema.

The Cid James
10-12-2017, 00:25:02
Código Delphi [-] (https://www.clubdelphi.com/foros/#)if contraseña2 = fModulo.qcontraseña['pass'].value


No me deja usar esto, error "invalid variant operarto"

Si de pronto no es lo que señala aposi. Se me ocurre que quizá CalcHash2 esté devolviendo un espacio... quizá hay que aplicar Trim ahí. Si puedes poner el código de CalcHash2 a lo mejor podríamos probar el tema.
Por lo visto si me esta devolviendo el valor nulo, probe con
else
//ShowMessage('chau');
Edit1.Text := fModulo.qcontraseña['pass'];
Y efectivamente salio que era nulo, la consulta en teoria no deberia serlo

Y el codigo de calhast2 esta en este post y funciona perfectamente lo use para guardar la contraseña anteriormente Hash md5 (https://www.clubdelphi.com/foros/showthread.php?t=80798)

The Cid James
10-12-2017, 02:41:42
Lo solucione de la siguente forma para que encontrara el valor de "pass"

procedure Tflogin.BloginClick(Sender: TObject);
var
contraseña2, contraseña3: string;
begin
fmodulo.qcontraseña.Active:= true;
if trim(ELcont.Text) = ''
then
ShowMessage('Por favor intruzca la contraseña de administracion')
else
contraseña2 := CalcHash2 (ELcont.Text, haMD5);
if fmodulo.qcontraseña.Locate('pass', contraseña2, [])
then
begin
Self.Close;
fmodulo.qempresa.Active := true;
fmodulo.qempresa.Edit;
fconfiguracion := Tfconfiguracion.Create(self);
fconfiguracion.Parent := fPrincipal.TPprincipal;
fconfiguracion.ManualDock(fPrincipal.TPprincipal);
fconfiguracion.Align := alClient;
fconfiguracion.Show;
fmodulo.qcontraseña.Active := false;
end
else
ShowMessage('Contraseña incorrecta por favor intentelo de nuevo');
fmodulo.qcontraseña.Active := false;
end;

AgustinOrtu
10-12-2017, 20:59:04
Volviendo al codigo original, los tiros van por aca:


if contraseña2 = fModulo.qcontraseña['pass'].value


No tengo Delphi a mano para probar, pero fModulo.qcontraseña['pass'].value esto devuelve un Variant (http://docwiki.embarcadero.com/Libraries/en/System.Variant), y contraseña2 es un string. Y como no tengo a mano para probar, no recuerdo si se pueden comparar directamente strings y Variants.

Lo que si se puede hacer es convertir el valor del campo a string, quedando asi:


if contraseña2 = fModulo.qcontraseña['pass'].AsString


Ahora si es posible comparar los dos strings

El Locate (http://docwiki.embarcadero.com/Libraries/en/Data.DB.TDataSet.Locate) lo que hace es posicionar el DataSet en el primer registro que cumple la condición, y devuelve True si encontró 1, o False en caso contrario