Fórum Como bloquear usuario após 3 erros de senha/login #7714

17/07/2009

0

Prezado,   Também estou com outras dúvidas, mas como tem que ser uma para cada chamado... ...Primeiro - Como bloquear o usuário após 3 tentativas errdas na senha e ou login?     Estou postando o caminho do disco virtual.   Desde já obrigado.   Andre Freitas.
Andre Freitas

Andre Freitas

Responder

Posts

17/07/2009

Andre Freitas

Segue caminho do disco virtual : http://video.devmedia.com.br/discovirtual/216474/DbSysMac.rar   Andre Freitas.
Responder

Gostei + 0

19/07/2009

Wesley Yamazack

Olá meu caro,
 Vamos a solução.
  - Criar um campo na tabela de usuario, exemplo, Ativo, caso sim o usuario ta liberado, senao, ele esta bloqueado.
  - Crie uma variável, em private, chamada IntTentativa : Integer = 0;
  - No Clique do botao que voce tenta conectar, voce deve estar fazendo o seguinte.
  if (usuario = usuario do banco) and (senha = senha do banco) and (status = 'ativo') then
    abre form
  else
    inc(IntTentativa); // incrementa o numero de tentativas em 1;
  O que voce tem que fazer antes do teste de usuario e senha seria
  if IntTentativas = 3 then
begin
    showmessage('Usuario bloqueado')
    alterar status do usuario; para bloqueado.
end;

  Sacou ? Espero que isso te ajude, qualquer coisa só postar

att,

Wesley Y
Responder

Gostei + 0

21/07/2009

Andre Freitas

boa tarde amigo, A parte da tentativa eu consegui, mas a parte do bloqueio ainda estou com dúvida, poque estou comparando dentro do firebird. Ex: select * from nometabela where nomeusuario=:Vusuario and nomesenha=:Vsenha (agora aparece a duvia).???   ...Também quando clico no botão ok para acessar fiz isso... Vusuario:=tabela.nomesuario Vsenha:=tabela.nomesenha //até aui funciona mas não estou sabendo com comparar o status ...   ... E como alterar o status após erro da senha.   Andre
Responder

Gostei + 0

22/07/2009

Wesley Yamazack

Opa meu amigo, que bom que um problema foi resolvido. vamos ao outro.
  No clique do botão Entrar ou OK, para acessar o sistema. faça o seguinte


procedure TForm1.ButtonClick.....
Var
  Qry : TSqlQuery; // Se você usar DBExpress Senão crie um query do tipo do componente que vc usa pra acessar dados.

Begin
Rotina que você já tem pronta hoje para valdar etc.


if (usuario = qryusuario and senha = qrysenha and qrystatus = ativo ) then
ao inves de comprar o usuário e senha, você tem que saber se aquele usuário ta ativo ou não, certo ?

na hora de ver se o usuário tentou 3 vezes, você bota o seguinte.


  Qry := TSqlQuery.Create(Self);
  Qry.SqlConnection := SqlConnection; // Sua conexao;
  Qry.Sql.Add('UPDATE USUARIO                                   ');
  Qry.Sql.Add('SET STATUS = BLOQUEADO'                   );
  Qry.Sql.Add('WHERE USUARIO = +EDTUSUARIO.TEXT );
  Qry.Sql.Add('AND SENHA = +EDTSENHA.TEXT             );
  Qry.ExecSQL;

end;

    ou seja quando o cara tentar as 3x, ele irá automaticamente alterar o status do usuário.

Com isso você mata o problema, senão consegui, me manda o clique do botão, que eu altero pra vc.

Att,

Wesley Y
Responder

Gostei + 0

24/07/2009

Wesley Yamazack

Olá meu amigo,
   Td bem ? Consegui, fazer o exemplo ? Estou no aguardo, pra qualquer dúvida, OK ?
 

Att,

Wesley Y
Responder

Gostei + 0

24/07/2009

Andre Freitas

Meu camarada ainda não fiz, mais tarde vou fazer.   Vlw pela atenção.   Andre
Responder

Gostei + 0

25/07/2009

Wesley Yamazack

Fala meu caro,
  Blz, estou no aguardo.

Um abraço


Wesley Y
Responder

Gostei + 0

27/07/2009

Andre Freitas

Bom dia meu amigo, Tentei fazer o que vc passei, mas não sei porque não funcionou. ...Estou enviando o caminho do disco virtual para vc dar uma olhada. o projeto este dentro da pasta unit segue o caminho: http://video.devmedia.com.br/discovirtual/216474/DbSysMac.rar   Atte,   Andre Freitas 
Responder

Gostei + 0

27/07/2009

Wesley Yamazack

Olá meu caro,
  Me manda somente o código onde é pra ser feito, quero ver como você fez o exemplo, dai tiro tua dúvida.
  Fico no aguardo.

Att,

Wesley Y
Responder

Gostei + 0

27/07/2009

Andre Freitas

Ok, segue o codigo... //AO ABRIR O FORM INICIA TENTATIVAS COM ZERO   procedure TFrmConexao.FormCreate(Sender: TObject);
begin
  Tentativas:=0; //conta o nº de vezes que senha ou login foram digitados incorretamente
  IniConf:=TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'conf.ini'); //cria o arquivo ini
 
end;   //CLIQUE DO BOTÃO OK PARA CONFIRMAR SE SENHA ESTA CORRETA E SE ESTÁ BLOQUEADO procedure TFrmConexao.BbtnAcessarClick(Sender: TObject); begin
    {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;
   
    DMSysMac.IBQuerySysMac.Open;
   
    if (DMSysMac.IBQuerySysMac.RecordCount > 0) then
    begin
      {Abre janela splash e depois ativa os formes que serão utilizados}
      FrmSplash:=TFrmSplash.Create(Self);
      Frmsplash.show;
      Frmsplash.refresh;
      Frmsplash.Gauge1.Progress:= 1;
      Application.Initialize;
      Frmsplash.Gauge1.Progress:= 5;
      Frmsplash.Gauge1.Progress:= 10;
      //Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Frmsplash.Gauge1.Progress:= 99;       Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Application.CreateForm(TFrmBarServ, FrmBarServ);       Frmsplash.Gauge1.Progress:= 100;
      Sleep(500);
      Frmsplash.Free;       FrmPrincipal.Show;
      FrmBarServ.Show;
      FrmBarServ.EdtUser.text:= EdtLogin.Text;
     
      FrmConexao.Free;
      Application.Run;
      end
    else
    begin
       inc(Tentativas);
       if Tentativas > 3 then
       begin
        // DMSysMac.IBQuerySysMac.ParamByName('Bloq_S_N').AsString:='Sim';
         showmessage('Final de Tentativas, acesso bloqueado!');
         Application.Terminate;
       end
    else
    begin
      showmessage('Usuário ou senha inválido!');
    end;
    end;
end;
  \\\COMPARAÇÃO DENTRO DO IBQUERY   select *  from "TblUser"
where "Login"=:VLogin and "Senha"=:VSenha   No aguardo.   Andre Freitas
Responder

Gostei + 0

28/07/2009

Wesley Yamazack

Olá meu amigo, vamos lá. //CLIQUE DO BOTÃO OK PARA CONFIRMAR SE SENHA ESTA CORRETA E SE ESTÁ BLOQUEADO procedure TFrmConexao.BbtnAcessarClick(Sender: TObject); begin
    {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;
   
    DMSysMac.IBQuerySysMac.Open;
   
    if (DMSysMac.IBQuerySysMac.RecordCount > 0) then
    begin
      {Abre janela splash e depois ativa os formes que serão utilizados}
      FrmSplash:=TFrmSplash.Create(Self);
      Frmsplash.show;
      Frmsplash.refresh;
      Frmsplash.Gauge1.Progress:= 1;
      Application.Initialize;
      Frmsplash.Gauge1.Progress:= 5;
      Frmsplash.Gauge1.Progress:= 10;
      //Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Frmsplash.Gauge1.Progress:= 99;       Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Application.CreateForm(TFrmBarServ, FrmBarServ);       Frmsplash.Gauge1.Progress:= 100;
      Sleep(500);
      Frmsplash.Free;       FrmPrincipal.Show;
      FrmBarServ.Show;
      FrmBarServ.EdtUser.text:= EdtLogin.Text;
     
      FrmConexao.Free;
      Application.Run;
      end
    else
    begin
       inc(Tentativas);
       if Tentativas > 3 then
       begin
        // DMSysMac.IBQuerySysMac.ParamByName('Bloq_S_N').AsString:='Sim';
       BloquearUsuario(EdtLogin.Text,edtSenha.Text);
         showmessage('Final de Tentativas, acesso bloqueado!');      
         Application.Terminate;
       end
    else
    begin
      showmessage('Usuário ou senha inválido!');
    end;
    end;
end;

//DECLARE E IMPLEMENTE ESTE PROCUDRE, FEITO ISSO ADPTE A MESMA AO IBQUERY, ESTOU CRIANDO //UMA QUERY DINAMICAMENTE
procedure TFrmConexao.BloquearUsuario(Usuario, Senha: String);
Var
  Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Conexao := DMSysMac.Conexao;
  Qry.Sql.Add('UPDATE TblUser                        '+
                   ' SET STATUS = ' + 'BLOQUEADO'  + 
                   ' WHERE USUARIO =  ' USUARIO    +
                   '    AND SENHA  = ' SENHA           +);
  QRY.EXECUTE; OU QRY.OPEN;   

end;
  \\\COMPARAÇÃO DENTRO DO IBQUERY   select *  from "TblUser"
where "Login"=:VLogin and "Senha"=:VSenha AND "STATUS" <> "BLOQUEADO"


  Adpte o exemplo, e veja se assim não funciona.

  Fico a disposição.

Att,

Wesley Y
Responder

Gostei + 0

28/07/2009

Andre Freitas

Amigão desculpe-me ser chato, mas adaptei no meu aplicativo mas não está funcionando. Informações adicionais 1º Eu estou usando 01 data modulo que tem (01 ibquery, ibdatabase, 01 ibtrasaction e varias ibtables)   2ºTem um form (faz conexao com o banco)   3º Quando incluo "Bloq_S_N" <> "SIM" ....(SQL)   select *  from "TblUser"
where "Login"=:VLogin and "Senha"=:VSenha AND "STATUS" <> "BLOQUEADO"   DÚVIDAS??? ...O ibquery contém como parametros VLogin,  VSenha  e 03º paramatro ( inclui o paramentro VBloq ) que não tinha.   ...Quando vou ativar a ibquery ocorre um erro dinamic sql não localiza uma coluna.   Onde incluo a prodecure? procedure TFrmConexao.BloquearUsuario(Usuario, Senha: String);
Var
  Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Conexao := DMSysMac.Conexao;
  Qry.Sql.Add('UPDATE TblUser                        '+
                   ' SET STATUS = ' + 'BLOQUEADO'  + 
                   ' WHERE USUARIO =  ' USUARIO    +
                   '    AND SENHA  = ' SENHA           +);
  QRY.EXECUTE; OU QRY.OPEN;    end;     O usuário comparado na clausila acima você tirou da onda (depois de WHETE USUARIO=)  o mesmo para senha. ... Dentro do data modulo ou do form conexao?   Outra duvida   No código abaixo e comparado se o parametro é igual as caixas de texto {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;
   
    DMSysMac.IBQuerySysMac.Open;   ...só que senha e login e o bolqueio onde entra?   Desde já agreço sua atenção   Andre Freitas.            
Responder

Gostei + 0

29/07/2009

Wesley Yamazack

Olá meu amigo. Sem problemas vamos lá.

Você pode incluir esta procedure no próprio form de login mesmo. O que importa é você executar ela no momento que exibir a mensagem dizendo que o usuário foi bloqueado. Ai voce executa ela
  Ex : bloquearUsuario(Edtusuario, EdtSenha); Só isso

Onde incluo a prodecure? procedure TFrmConexao.BloquearUsuario(Usuario, Senha: String);
Var
  Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Conexao := DMSysMac.Conexao;
  Qry.Sql.Add('UPDATE TblUser                                  '+
                   ' SET Bloq_S_N           = ' + 'SIM'   + 
                   ' WHERE USUARIO  = ' + USUARIO           +
                   '    AND SENHA        = ' + SENHA                );
  QRY.EXECUTE; OU QRY.OPEN;    end;     O usuário comparado na clausila acima você tirou da onda (depois de WHETE USUARIO=)  o mesmo para senha. ... Dentro do data modulo ou do form conexao?
  Se você olhar a procedure tem dois parametros, usuário e senha, os mesmos são os usuário e senha que vocÊ irá passar para poder bloquear. Eles serão substituidos pelos valores que você passar qnd for executar a procedure;
  Ex : EdtUsuario = Wesley
          EdtSenha   = 123

O SQL fará isso

Var
  Qry : TIBQuery;
begin
  Qry := TIBQuery.Create(Self);
  Qry.Conexao := DMSysMac.Conexao;
  Qry.Sql.Add('UPDATE TblUser                                  '+
                   ' SET Bloq_S_N        = ' + 'SIM'   + 
                   ' WHERE USUARIO  = ' + WESLEY           +
                   '    AND SENHA        = ' + 123                );
  QRY.EXECUTE; OU QRY.OPEN;    end;
  Sendo assim ele irá bloquear o meu usuário;

Outra duvida   No código abaixo e comparado se o parametro é igual as caixas de texto {Conexao de acesso ao banco de dados, se senha ou login diferente,
     tem mais um tentativa para acesso senão o banco e fechado}
    DMSysMac.IBQuerySysMac.Close;
    DMSysMac.IBQuerySysMac.ParamByName('VLogin').AsString:= edtLogin.Text;
    DMSysMac.IBQuerySysMac.ParamByName('VSenha').AsString:= edtSenha.Text;   
    DMSysMac.IBQuerySysMac.Open;
  ...só que senha e login e o bolqueio onde entra?

if (DMSysMac.IBQuerySysMac.RecordCount > 0) and DMSysMac.IBQuerySysMac.FieldByName('Bloq_S_N').Asstring <> 'SIM') then
    begin
      {Abre janela splash e depois ativa os formes que serão utilizados}
      FrmSplash:=TFrmSplash.Create(Self);
      Frmsplash.show;
      Frmsplash.refresh;
      Frmsplash.Gauge1.Progress:= 1;
      Application.Initialize;
      Frmsplash.Gauge1.Progress:= 5;
      Frmsplash.Gauge1.Progress:= 10;
      //Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Frmsplash.Gauge1.Progress:= 99;       Application.CreateForm(TFrmPrincipal, FrmPrincipal);
      Application.CreateForm(TFrmBarServ, FrmBarServ);       Frmsplash.Gauge1.Progress:= 100;
      Sleep(500);
      Frmsplash.Free;       FrmPrincipal.Show;
      FrmBarServ.Show;
      FrmBarServ.EdtUser.text:= EdtLogin.Text;
     
      FrmConexao.Free;
      Application.Run;
      end
    else
    begin
       inc(Tentativas);
       if Tentativas > 3 then
       begin
        // DMSysMac.IBQuerySysMac.ParamByName('Bloq_S_N').AsString:='Sim';
         showmessage('Final de Tentativas, acesso bloqueado!');
         Application.Terminate;
       end
    else
    begin
      showmessage('Usuário ou senha inválido!');
    end;
    end;
     Se conseguir, me manda novamente todo o código, com as alterações que te mandei, tudo o que você fez. Fico no aguardo do seu retorno.

    Um abraço, estamos a sua disposição.


Att,

Wesley Y

Responder

Gostei + 0

31/07/2009

Wesley Yamazack

Olá meu amigo,
  Consegui adpatar o exemplo ? Estou no aguardo para concluírmos este chamado.
  Um abraço

Wesley Y
Responder

Gostei + 0

31/07/2009

Andre Freitas

Meu amigo ainda está ocorrendo erro.   Não está recenhecendo o procedimento abaixo procedure TFrmConexao.BloquearUsuario(Usuario, Senha: String);   não encontra bloquearUsuario. ...quando vou declarar a procedure não funciona informando não identificada.   ...Também não sei porque quando vou digitar procedure TFrmConexao. não lista as opções.   Andre
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar