Fórum Como bloquear usuario após 3 erros de senha/login #7714
17/07/2009
0
Andre Freitas
Curtir tópico
+ 0Posts
17/07/2009
Andre Freitas
Gostei + 0
19/07/2009
Wesley Yamazack
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
Gostei + 0
21/07/2009
Andre Freitas
Gostei + 0
22/07/2009
Wesley Yamazack
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
Gostei + 0
24/07/2009
Wesley Yamazack
Td bem ? Consegui, fazer o exemplo ? Estou no aguardo, pra qualquer dúvida, OK ?
Att,
Wesley Y
Gostei + 0
24/07/2009
Andre Freitas
Gostei + 0
25/07/2009
Wesley Yamazack
Blz, estou no aguardo.
Um abraço
Wesley Y
Gostei + 0
27/07/2009
Andre Freitas
Gostei + 0
27/07/2009
Wesley Yamazack
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
Gostei + 0
27/07/2009
Andre Freitas
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
Gostei + 0
28/07/2009
Wesley Yamazack
{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
Gostei + 0
28/07/2009
Andre Freitas
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.
Gostei + 0
29/07/2009
Wesley Yamazack
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
Gostei + 0
31/07/2009
Wesley Yamazack
Consegui adpatar o exemplo ? Estou no aguardo para concluírmos este chamado.
Um abraço
Wesley Y
Gostei + 0
31/07/2009
Andre Freitas
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)