Ir para conteúdo
raphaelfogaca

[Resolvido] Como melhorar a validação de login

Recommended Posts

Olá galera, sou novo em desenvolvimento e estou tentando desenvolver o sistema da minha monografia na época da faculdade.

Escrevi um trecho para validar usuário e senha para ter acesso a aplicação, mas acredito que usando foreach para percorrer toda a lista de usuários não seja a melhor opção.

 

Como posso melhorar essa validação? Obrigado!!

 

  private void btn_Entrar(object sender, EventArgs e)
        {
            string login = textUsuario.Text;
            string senha = textSenha.Text;       
           
            UsuarioEntity uEntity = new UsuarioEntity();
            IList<Usuario> lista = uEntity.Usuarios();
                                  
                foreach (var item in lista) { 
                if ((item.UsuarioLogin == textUsuario.Text) && (item.UsuarioSenha == textSenha.Text))
                {
                    MessageBox.Show("Seja bem vindo ao Controle de Rotas");
                    panelLogin.Visible = false;
                    button4.Visible = true;
                    button5.Visible = true;
                    break;
                } else{
                    MessageBox.Show("Usuário e/ou Senha Incorreto(s)");
                    textUsuario.Text = "";
                    textSenha.Text = "";
                    break;
                }
            }            
        }

 

     

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não precisa (não deve) percorrer toda a lista, eu vi que antes de comparar o login e senha você trouxe todos os usuários do banco, isso não é necessário, o correto é procurar apenas 1 usuário que possua o login e senha informado.

 

Nessa linha aqui: 

IList<Usuario> lista = uEntity.Usuarios();

Usuarios() é um método que você criou ou é do EntiyFramework ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, quintelab disse:

Você não precisa (não deve) percorrer toda a lista, eu vi que antes de comparar o login e senha você trouxe todos os usuários do banco, isso não é necessário, o correto é procurar apenas 1 usuário que possua o login e senha informado.

 

Nessa linha aqui: 


IList<Usuario> lista = uEntity.Usuarios();

Usuarios() é um método que você criou ou é do EntiyFramework ?

 

Usuarios() é um método que eu criei que retorna a lista de usuarios.ToList();

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal seria criar outro método, algo como:

GetUsuario(string login, string password)

Nesse seu método você irá novamente buscar os usuários no banco porém adicionando duas condições (where)

Por exemplo:

SELECT * FROM USUARIOS WHERE PASSWORD = password (parametro que recebeu no método) AND LOGIN = login (parametro que recebeu no método)

 

Se estiver usando EntiyFramework a ideia é a mesma. Caso esse método retorne algo quer dizer que o usuário foi encontrado, caso contrário não existe o usuário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo!
Criei outro método para validar usuário e dentro do método faço o select para buscar somente o usuário específico.

 

Obrigado!

 

public bool ValidaUsuario(string login, string senha)
        {
            using (ControleRotasContext db = new ControleRotasContext())
            {
                var query = db.Usuarios.Where(o => o.UsuarioLogin == login && o.UsuarioSenha == senha).FirstOrDefault();
                if (query != null)
                {
                    return true;
                }
                else return false;
            }
        }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por MasterJ
      nao consigo encontrar o erro neste codigo
       
      <?php 
      if(isset($_POST['btnLogin'])){
        $email = trim($_POST['user_email']);
        $upass  = trim($_POST['user_pass']);
        $h_upass = sha1($upass);
        
         if ($email == '' OR $upass == '') {
            message("Invalid Username and Password!", "error");
            redirect("login.php");
               
          } else {  
        //it creates a new objects of member
          $user = new User();
          //make use of the static function, and we passed to parameters
          $res = $user::userAuthentication($email, $h_upass);
          if ($res==true) { 
             message("You logon as ".$_SESSION['ROLE'].".","success");
            if ($_SESSION['ROLE']=='Administrator' || $_SESSION['ROLE']=='Student'){
              $_SESSION['ADMIN_USERID'] = $_SESSION['USERID'];
              $_SESSION['ADMIN_FULLNAME'] = $_SESSION['FULLNAME'] ;
              $_SESSION['ADMIN_USERNAME'] =$_SESSION['USERNAME'];
              $_SESSION['ADMIN_ROLE'] = $_SESSION['ROLE'];
              unset( $_SESSION['USERID'] );
              unset( $_SESSION['FULLNAME'] );
              unset( $_SESSION['USERNAME'] );
              unset( $_SESSION['PASS'] );
              unset( $_SESSION['ROLE'] );
               redirect(WEB_ROOT."admin/index.php");
            } 
          }else{
            message("Account does not exist! Please contact Administrator.", "error");
             redirect(WEB_ROOT."admin/login.php"); 
          }
       }
       } 
       ?> 
       
    • Por Jonathacsantos
      Boa tarde, sou novo na programação, comecei por conta própria e agora estou com um pequeno problema, meu programa depende de uma pasta criada pra executar um .exe que fica dentro de uma outra pasta, sendo que eu preciso que ele leia o .exe independente de onde ele fica instalado, vou mostrar uma parte do código para tentar explicar 
      private void AcessRemo_Click(object sender, EventArgs e) { foreach ( var process in Process.GetProcessesByName("TeamViewer")) { process.Kill(); } Process.Start("C:\\Teste\\suporteremoto.exe"); ele fecha um teamviewer em execução e executa uma versão especifica do teamviewer, sendo que nos meus testes funciona pq eu tenho essa pasta ai chamada teste, mas o programa instala em Program Files, sendo que se for 64, ele vai pra Program Files (x86), dai gostaria de fazer ele ler, tipo um [LocalPath] , mas não sei como , se alguem puder me ajudar ou me da uma luz eu agradeço muito.
    • Por lucasrodrigues
      Estou com esse problema ao tentar vincular uma tabela do MySql a um DataSet. Utilizo o MySqlConnector 8.0.13, MySql-For-VisualStudio 1.2.8.

    • Por jtc-carr
      Linguagem c
      Queria a partir de um ficheiro fazer varias somas do seu conteúdo por exemplo de caracteres especiais, vogais, letra "a" , números, De forma a que devolve-se por exemplo 5 linhas, 4 caracteres especiais, 7 vogais, 9 "a", 6 numeros, num total de 40 caracteres, para os numeros fiz um if, para a função mas não funciona como devia
      while( (texto[MAX]=fgetc(textos))!= EOF ) if(texto[MAX] == '\n') linha++; printf("Existem %d linhas no arquivo\n", linha); if (i == '0' || i == '1' || i == 2' || i == '3' || i == '4' || i == '5' || i == 6' || i == '7' || i == '8'|| i == '9' ) Ajuda seria bem vinda, que queria perceber bem isto
    • Por Maicon Santos
      Foi me passada a tarefa de fazer um sistema onde o usuário (funcionário 1) (Funcionário da empresa X) irá fazer um cadastro com suas informações, após esse cadastro essas informações serão avaliadas por outro funcionário (funcionário 2) da empresa X que fica responsável apenas por verificar as informações desse usuário e dar permissões a ele. Até então é um sistema simples de cadastro.
      Após o funcionário 1 fazer o cadastro o funcionário 2 avaliará essas informações para ver se esse usuário pode ter acesso a conta bancária da empresa. (Pera! Como assim?) Exatamente isso, o usuário vai se cadastrar e se ele for apto a acessar a conta bancária da empresa o sistema terá que fazer o login na conta bancária da empresa, ou seja o sistema deve apenas verificar os dados do funcionário 1, se ele for apto abrir a conta da empresa o sistema terá que passar os dados pelo internet banking do Santander.
       
      Um outro exemplo que talvez facilite entender:
      Os funcionários 1, 2 e 3 trabalham juntos gerenciando as finanças da empresa, então todos eles precisam acessar a conta bancaria da empresa, mas o gerente para não ter que passar o login e senha para eles quer que o sistema faça esse login, sem que os funcionários saibam esses devidos dados, então os funcionários farão um cadastro no sistema e após fazer o login no mesmo eles automaticamente fazem o login na conta do Santander da empresa
       
      Basicamente isso, minhas dúvidas até o momento:
      Isso é realmente possível? Fazer o login no internet banking, que tem a função de ser muito seguro, através de um outro sistema
      Eu tenho a disponibilidade para escolher entre fazer um sistema desktop (usando C#, que eu tenho mais domínio) ou fazer um sistema WEB (que eu não possuo tanto domínio assim das linguagens), para fazer esse tipo de trabalho, o que seria mais indicado?
      Quais dicas vocês podem me dar para essa tarefa? Eu trabalho na área de desenvolvimento a pouco tempo, por isso não tenho muito conhecimento de sistemas desse nível, qualquer direção será de grande ajuda.
      Grato!
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.