Intentos fallidos espere para volver a ingresar

La verdad soy nuevo programando en VFP
Bueno tengo un formulario de inicio de sesión con dos cuadros de textos y dos botones de comando (aceptar y cancelar), quisiera saber como hago para que cuando tenga 3 intentos fallidos bien sea en Usuario y/o Contraseña el acceso al programa quede bloqueado por un tiempo determinado por ejemplo una hora.
El código que tengo para el botón aceptar es el siguiente:
SELECT usuarios
IF SEEK(ALLTRIM(thisform.text1.Value))=.F.
    MESSAGEBOX("Usuario o clave inválidos", 0+64)
    thisform.text1.SetFocus
    RETURN
ENDIF
IF CREATEBINARY(ALLTRIM(thisform.text2.Value)) <> usuarios.clave
    MESSAGEBOX("Usuario o clave inválidos",0+64)
    thisform.text1.SetFocus
    RETURN
ENDIF
usuarioActivo= usuarios.usuario
DO "D:\Proyecto\MENUPRINCIPAL.MPR"
Thisform. Release
1

1 Respuesta

98.900 pts. Hola ... Estudio Ingenieria en Sistemas, con...
donde dice thisform.text1.setfocus
return
donde dice que no es valido debes de poner un contador
cantidad = 1
if cantidad = 3
clear events
quit
endif
SELECT usuarios
IF SEEK(ALLTRIM(thisform.text1.Value))=.F.
    MESSAGEBOX("Usuario o clave inválidos",0+64)
    thisform.text1.SetFocus
cantidad = cantidad + 1
    RETURN
ENDIF
IF CREATEBINARY(ALLTRIM(thisform.text2.Value)) <> usuarios.clave
    MESSAGEBOX("Usuario o clave inválidos",0+64)
    thisform.text1.SetFocus
cantidad = cantidad + 1
    RETURN
Endif
Gracias hno!
Esto resulta... ¿Pero mira alguna idea de como puedo hacer para bloquear el usuario por un tiempo determinado?
Espero tu pronta respuesta y gracias de antemano
Mmm, bueno disculpa la tardanza, pero bueno lo que puedes hacer es lo siguiente
En tu tabla de usuarios, ponle un campo que diga hábil o inhábil y cuando intente hacerlo más de 3 veces cambias el valor, si manegas tablas de fox, deberías de poner un false y cuando este preguntando si el usuario existe, lo que haces es where activo = .t. y si trabajas con mysql te recomiendo 1 y 0 y bueno también un campo donde tenga la hora que se bloqueo, ya que no queras que siempre este bloqueado, entonces cuando entre y verifique la hora, si la hora es menor a 30 minutos por ejemplo que no haga nada, de lo contrario que cambie el valor de hábil es decir el campo por .t. y que lo deje entrar si es la contraseña correcta
Que tal hno!
Bueno entendí lo de cambiar el valor a .f., no trabajo mysql todavía no lo he trabajado.
Lo que si no entiendo es donde colocar el nuevo campo que se bloqueo
y menos se que comando debo utilizar para que capte la hora en que se bloqueo el sistema, de todas maneras te envío el código que he desarrollado:
WITH thisform
    IF EMPTY (thisform.text1.Value)
        MESSAGEBOX ("No debe dejar el campo Usuario en blanco", 16 ,"Error")
        thisform.text1.SetFocus
        .text1.Value=""
        .text2.Value=""
        RETURN
    ENDIF
    IF EMPTY (thisform.text2.Value)
        MESSAGEBOX ("No debe dejar el campo Contraseña en blanco", 16 ,"Error")
        thisform.text1.SetFocus
        .text1.Value=""
        .text2.Value=""
        RETURN
    ENDIF
    IF nDENEGADO = 2
        SELECT usuarios
            DO CASE
                CASE ALLTRIM(thisform.text1.Value)= "ZILADCOH" =.T.
                    UPDATE  usuarios SET activo= .F. WHERE usuarios.usuario = "ZILADCOH"
                CASE ALLTRIM(thisform.text1.Value)= "CEDIC" =.T.
                    UPDATE  usuarios SET activo= .F. WHERE usuarios.usuario = "CEDIC"
            ENDCASE
MESSAGEBOX("Lo sentimos por su seguridad su Usuario ha sido DESACTIVADO contacte al administrador", 16,"Error")
thisform.Release
clear events
        QUIT
    ENDIF
    SELECT usuarios
            IF SEEK(ALLTRIM(thisform.text1.Value))=.F.
                nDENEGADO = nDENEGADO + 1    
                MESSAGEBOX("Usuario y/o Contraseña incorrecto(s), Ud. a realizado "+ALLTR(STR(nDENEGADO))+" intento(s)",64,"Mensaje")
                .text1.Value=""
                .text2.Value=""
                thisform.text1.SetFocus
                RETURN
            ENDIF
            IF CREATEBINARY(ALLTRIM(thisform.text2.Value)) <> usuarios.clave
                nDENEGADO = nDENEGADO + 1
                   MESSAGEBOX("Usuario y/o Contraseña incorrecto(s), Ud. a realizado "+ALLTR(STR(nDENEGADO))+" intento(s)",64,"Mensaje")
                .text1.Value=""
                .text2.Value=""
                thisform.text1.SetFocus
                RETURN
            ENDIF
    IF SEEK(ALLTRIM(thisform.text1.Value))= usuarios.activo = .F.
        Thisform.Release
        clear events
        MESSAGEBOX("Usuario Inactivo póngase en contacto con el Administrador", 0+64)
        QUIT
    ENDIF
    DO "D:\Proyecto\MENUPRINCIPAL.MPR" && Este comando genera un mensaje de error si no existe el menú. Para probar la pantalla sin el menú es conveniente colocar este comando en comentario iniciando la línea con
thisform. Release && Cierra el formulario
ENDWITH
La verdad disculpa la molestia y espero que me ayudes a solventar este problema
saludos desde Venezuela
Pues el campo debe de estar en tu tabla, lo que tienes que hacer es solo agregar un campo y lo que tienes esta bien,
pero bueno tu tienes mucho código, que no esta muy correcto, es decir si esta bien pero es demasiado para lo que quieres hacer...
Lo que yo aria, seria algo así
if empty(nom_usuario) and empty(nom_password)
messagebox("Complete informacion, ya que se encuentran vacios los datos de usuario y contraseña")
else
select campo_activo from tabla where nombre == nom_usaurio and password == nom_password into cursor temporal
if _tally > 0
         if temporal.campo_activo == .T.
                      do form formprincipal  && Aqui va lo que quieres que se aga si puede ingresar.
         else
                Messagebox("Lo sentimos su usuario esta bloqueado consulte con su admin")
        Endif
else
        Messagebox("Error, usuario o contrasañe incorrectas")
Endif
Endif

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas