Jump to content

[Resolvido] [ajuda][login em webserver]


smack_dead
 Share

Recommended Posts

Ola amigos, então gostava de saber como é que posso fazer uma função login com verificação se a palavra pass esta igual a da bd...

o exercicio e este---

ao efetuar o login devera ser verificado se a palavra chave fornecida confere com a palavra chave do utilizador

caso o utilizador nao exista ou a senha fornecida nao coincida com a senha da bd entao a variavel logged =false.

a password esta encriptada na bd possivelmente....

Edited by smack_dead
Link to comment
Share on other sites

Primeira coisa que tens de saber (acho que já te tinha dito isto):

- Tabela da base de dados onde estão o utilizador e palavra-passe

- Nomes dos campos nessa tabela para o utilizador e palavra-passe

- Encriptação: Precisas ter uma função que te encripte a palavra-passe, tanto para login, como para criação/edição do utilizador na DB

Já tens estas 3 coisas?

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

sim, já tenho essas 3 coisas, apesar da função para encriptar ainda não a ter na ''mão'', mas depois e so acrescentar

..

eu com aquele código já fui buscar as tabelas... so que nao ententi aquele "result".... tenho de declarar penso eu ...

sim ainda esta incompleto porque ainda não faz a verificação nem nada...

Link to comment
Share on other sites

sim, já tenho essas 3 coisas, apesar da função para encriptar ainda não a ter na ''mão'', mas depois e so acrescentar

Pois... Por o telhado na casa sem lhe meter primeiro os alicerces é complicado.

Faz primeiro isso...

eu com aquele código já fui buscar as tabelas... so que nao ententi aquele "result".... tenho de declarar penso eu ...

Chocked...

Alguma vez fizeste uma função em Delphi? Todas elas têm pré-declarada uma variável imaginária Result, do mesmo tipo de dados da própria função, onde guardas o resultado dessa função.

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites


var resust : string;

mas assim achas que ele guarda ?

Não. Aliás, tenho a certeza que não guarda nada...

Em cima, eu disse:

Chocked...

Alguma vez fizeste uma função em Delphi? Todas elas têm pré-declarada uma variável imaginária Result, do mesmo tipo de dados da própria função, onde guardas o resultado dessa função.

No outro tópico onde abordaste a questão, disseste que o sistema de login tinha de estar dentro de uma função.

Logo, a função já tem a variável Result, não tens de a declarar.

Quanto a guardar, não é suposto guardar nada... É uma verificação, e só tem de termina a função com o resultado dessa verificação.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Então, altera-a para o seguinte:

Onde estás a usar a variável Result, estás a atribuir-lhe valores de condições (booleanos).

Logo, a tua função tem de devolver um valor booleano (True, login feito; False, login falhado).

Além disso, nas condições estás a usar as variáveis User e Pass (foram os meus exemplos, não analisaste o código para corrigir para a tua realidade).

A tua função recebe esses valores em variáveis chamadas AUsername e APassword.

Por fim, se fazes, como está nessa função, a query antes de pesquisar pelo menos o utilizador, vais receber toda a tabela de utilizadores.

Como tens, ele apenas te vai comparar com o primeiro da lista, e falha em todos os outros, porque não estás a percorrer a tabela.

Sugestão: A query deve incluir ela própria o nome do utilizador, por forma a retornar apenas esse, e não toda a tabela. Depois sim, vai confirmar se a pass é válida.

Exemplo:

function Twebserver.Login(AUserName, APassword: string) : string;
begin
   D.ADOQuerylogin.SQL.Text:='Select codutilizador, codacesso from utilizadores where codutilizador="'+AUserName+'"';
   D.ADOQuerylogin.Open;
   // Verifica o utilizador
        Result:= D.ADOQuerylogin.utilizadores.RecordCount>0; // Se houver registos na query, é porque encontrou o utilizador

   if Result  // Se o utilizador for correcto, testa a pass
        then Result:= Encrypt(APassWord) = Ligacoes.ADOQuerylogin.password.FielbyName('codacesso').AsString;
   D.ADOQuerylogin.Close;
end;

Lembras-te de falarmos do RecordCount?

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

sim vou ter de usar o recordcount aqui tmb?? e entao como e que posso fazer para ela nao carregar os useres todos(é o ausername+''' -???) , pq sim agora q falas nisso ela assim carrega todos...

so nao entendo e de onde deriva aquele result...

Edited by smack_dead
Link to comment
Share on other sites

Verifica o meu ultimo exemplo...

Com a alteração da query já ele não carrega tudo. Carrega o AUsername pedido, ou nenhum, caso não o encontre.

É aí que entra o RecordCount. Se for 0, é porque não encontrou, e é user inválido.

Se encontrou algum, é porque encontrou lá pelo menos 1 (em teoria, apenas um, caso o campo username seja sempre único).

Nesse caso, passa à verificação da pass.

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Todas as funções têm essa variavel 🙂

Representa o valor da propria função.

Se tiveres

 

Function Func1():integer;
begin
  result:=1;
end;

Quando chamares a Func1 ela vai retornar 1. É só isto... nao precisas de pensar de onde vem 😛 é igual a teres:

 
Function Func1():integer;
begin
  Func1:=1;
end;
  • Vote 2
Link to comment
Share on other sites

muito bom 😉 descupla la a minha ignorancia mas ainda nao sei onde foste buscar o result :S é que nem inicializado esta n sei ...

E volto a perguntar: Alguma vez criaste uma função em Delphi?

Se sim, como é que retornas o resultado da função?

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.