Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Login y encriptado de contraseñas (https://www.clubdelphi.com/foros/showthread.php?t=92426)

The Cid James 26-10-2017 04:27:40

Login y encriptado de contraseñas
 
Primero que nada quiero decir que ya busque en el foro y si hay varios hilos al respecto pero no entiendo muy bien su funcionamiento de los ejmplos que baje y del codigo que pusieron en algunos hilos por eso abro este post.

Bueno aqui las preguntas al respecto:

1-Vi que algunos codigo usan en los form de login
Código Delphi [-]
loginok := true
Esta es una funcion ya existente de delphi o es una declaracion manual?.

En el form que cree para probar el registro en primera instancia estaba usando dbedit para la contraseña y reperir contraseña pero no fue el modo correcto de hacerlo entonces me puse con el componente tedit pero no logro como comparar las contraseñas y comprobarlos algo asi seria la logica de lo que quiero pero no pude mandar los datos a la base de datos :( y mucho menos cifrarlos
Código Delphi [-]
if tedit1 = tedit2 
then // aqui tendria que ir el llamado al cifrado :confused: y el post a la base de datos
else 
 cartel que avise que las contraseñas no son iguales

Con respecto al login primero deberia avisar al que intente logear que el usuario no existe o simplemente lo compruebo y si no existe mando una alerta como "el usuario o la contraseña no coinciden" por seguridad?. Obviamente a todo esto tiene que coincidir el usuario y la contraseña sean correctas para poder logearse.

Tambien lei por ahi que se puede trabajar directamente con lo usuarios de la base de datos (en mi caso sqlserver) que ventajas y desventajas tiene esto con respecto a usar una tabla de usuarios?

Gracias por su tiempo :D

ElKurgan 26-10-2017 07:34:44

Contestando a tus preguntas:

1)
Código Delphi [-]
LoginOk := True;
No es ninguna función. Es una asignación a una variable booleana. Seguramente el que la usaba la inicializa por defecto a True, pero sin el resto del código no podría asegurarte más

2)

La forma correcta de probar el login en primera instancia sería algo como esto:
Código Delphi [-]
if tedit1.Text = tedit2.Text then 
begin 
  // aqui tendria que ir el llamado al cifrado  y el post a la base de datos
end
else 
  ShowMessage('Las contraseñas no son iguales');
Respecto a la pregunta final, depende del gusto de cada uno, pero piensa una cosa: Para comprobar si se realiza el login correctamente sobre usuarios de la base de datos... ¡Tienes que conectarte primero a la base de datos con un usuario!.

En este caso, lo que se suele hacer es tener un usuario genérico en la base de datos, conectarte con ese a la misma, y luego comprobar los perfiles y autorizaciones con cada uno de los usuarios dados de alta


Saludos

The Cid James 26-10-2017 07:57:53

1 Archivos Adjunto(s)
Cita:

Empezado por ElKurgan (Mensaje 522023)
Contestando a tus preguntas:

1)No es ninguna función. Es una asignación a una variable booleana. Seguramente el que la usaba la inicializa por defecto a True, pero sin el resto del código no podría asegurarte más

Te adjunto el codigo del ejempo que descargue de la pagina

Cita:

Empezado por ElKurgan (Mensaje 522023)
2) La forma correcta de probar el login en primera instancia sería algo como esto:
Código Delphi [-]
if tedit1.Text = tedit2.Text then 
begin 
  // aqui tendria que ir el llamado al cifrado  y el post a la base de datos
end
else 
  ShowMessage('Las contraseñas no son iguales');

Como hago el post a un campo especifico, estuve trabajando con dbedit y eso manda el dato automaticamente

Cita:

Empezado por ElKurgan (Mensaje 522023)
Respecto a la pregunta final, depende del gusto de cada uno, pero piensa una cosa: Para comprobar si se realiza el login correctamente sobre usuarios de la base de datos... ¡Tienes que conectarte primero a la base de datos con un usuario!.

En este caso, lo que se suele hacer es tener un usuario genérico en la base de datos, conectarte con ese a la misma, y luego comprobar los perfiles y autorizaciones con cada uno de los usuarios dados de alta

El soft esta con un usuario por defecto conectado a sqlserver, ya sabia que necesita el usuario, de echo estaba pensando en crear un instalador para el soft y este verifique si el sistema tiene la sqlserver y pida los datos sino que instale los sqlsever y cree el usuario por defecto con los datos que ingese el que lo instale y esos valores asignarlos a la conexion con la base de datos(que por el momento no tengo ni la mas minima idea de como hacer eso asi que lo dejo para cuando el soft ande bien xD).
Tengo creada la tabla usuarios a medias pero mi pregunta pasaba mas por el rendimiento y la seguridad si conviene trabajar con los usuarios de el motor o la tabla.
Gracias por tu ayuda

ElKurgan 26-10-2017 12:23:05

He estado mirando el código que adjuntas y, efectivamente, es una declaración manual de una variable booleana.
Se inicializa a False y, solo en el caso de que usuario y password sean correctos, se pone a true. Es una especie de control del estado de la conexión.

En lo referente al campo específico yo lo que quería decir es que se debía controlar la propiedad "text" de los campos de edición, no el control en si mismo.
Veo que en él código que has remitido ya está corregido.

Y finalmente, el rendimiento no se ve afectado por este tema. Otra cosa es la seguridad, aunque también depende del propósito final de la aplicación. Un ejemplo: En el trabajo, en un programa para distintas personas de un taller, todo el mundo conoce la password general de la aplicación, aunque no pueden acceder a la base de datos así como así. Sin embargo, dentro si que tienen definidos perfiles de usuario, y dependiendo de quien se conecte, accederá a unas partes u otras de la aplicación. Como la aplicación no va a salir del taller, la seguridad tampoco es lo que más nos preocupa

Espero haber resuelto tus dudas

Un saludo

The Cid James 26-10-2017 23:39:42

Ok gracias, voy a ponerme con estos temas a ver si me sale ya andare preguntando cuando tenga otra duda o no entienda algo


La franja horaria es GMT +2. Ahora son las 05:33:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi