Login Form WinForm c#

Iniciado por evicar, 1 Diciembre 2010, 04:51 AM

0 Miembros y 1 Visitante están viendo este tema.

evicar

Estimados estoy tratando de buscar como generar un login form para mi proyecto winform... e googleado bastante  e encontrado esto:
http://ltuttini.blogspot.com/2010/05/login-usando-password-con-hash.html


me paresio bastante interesante.. pero al momento de llevarlo a mi aplicacio tengo probblemas con UsuarioEntity:
genere una clase llamada :

Código (csharp) [Seleccionar]
class LoginService
   {
       
       public static bool Autenticar(string usuario, string password)
       {
           string sql = @"SELECT COUNT(*)
                     FROM Usuarios
                     WHERE NombreLogin = @nombre AND Password = @password";


           using (SqlConnection conn = new SqlConnection("Data Source=ENZZO-PC\\SQLEXPRESS;Initial Catalog=ISW;Integrated Security=True"))
           {
               conn.Open();

               SqlCommand command = new SqlCommand(sql, conn);
               command.Parameters.AddWithValue("@nombre", usuario);

               string hash = Helper.EncodePassword(string.Concat(usuario, password));
               command.Parameters.AddWithValue("@password", hash);

               int count = Convert.ToInt32(command.ExecuteScalar());

               if (count == 0)
                   return false;
               else
                   return true;

           }
       }


       public static UsuarioEntity Insert(string nombre, string apellido, string nombreLogin, string password)
       {
           UsuarioEntity usuario = new UsuarioEntity();

           usuario.Nombre = nombre;
           usuario.Apellido = apellido;
           usuario.NombreLogin = nombreLogin;
           usuario.Password = password;

           return Insert(usuario);
       }

       public static UsuarioEntity Insert(UsuarioEntity usuario)
       {

           string sql = @"INSERT INTO Usuarios (
                          Nombre
                         ,Apellido
                         ,NombreLogin
                         ,Password)
                     VALUES (
                           @Nombre,
                           @Apellido,
                           @NombreLogin,
                           @Password)
                   SELECT SCOPE_IDENTITY()";


           using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
           {

               SqlCommand command = new SqlCommand(sql, conn);
               command.Parameters.AddWithValue("Nombre", usuario.Nombre);
               command.Parameters.AddWithValue("Apellido", usuario.Apellido);
               command.Parameters.AddWithValue("NombreLogin", usuario.NombreLogin);

               string password = Helper.EncodePassword(string.Concat(usuario.NombreLogin, usuario.Password));
               command.Parameters.AddWithValue("Password", password);

               conn.Open();

               usuario.Id = Convert.ToInt32(command.ExecuteScalar());

               return usuario;
           }
       }


       internal class Helper
       {
           public static string EncodePassword(string originalPassword)
           {
               MD5 md5 = MD5.Create();
               byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(originalPassword);
               byte[] hash = md5.ComputeHash(inputBytes);

               return BitConverter.ToString(hash).Replace("-", "");
           }
       }


   }

.::IT::.

#1
Bueno te falda definir la clase UsuarioEntity. que segun:

public static UsuarioEntity Insert(UsuarioEntity usuario)


deberia ser :

Public Class UsuarioEntity
{
       string Nombre {get;set;}
       Apellido {get;set;}
       NombreLogin {get;set;}
       Password {get;set;}
}


Claro que tambien podrias hacerlo declarando variable privadas para cada propiedad.
Simplemente .::IT::.

evicar

GRACIAS !!! SOLUCIONADO

Cerrar

.::IT::.

Cita de: evicar en  1 Diciembre 2010, 05:35 AM
GRACIAS !!! SOLUCIONADO

Cerrar

OK evicar, como recomendación para la seguridad de tu sistema deberías migrar ah Web Services y no conectarte a la base de datos directamente ya que la seguridad esta comprometida de manera irremediable(ya que la contraseña de conexión se encuentra en el programa cliente y .net es fácilmente descompilado), para incrementar un poco mas la seguridad usa el "dotfuscator community edition" y aun así estas vulnerable.

Nota: Si estoy equivocado pro favor corregirme.

Saludos!!!!!!
Simplemente .::IT::.

Siuto

Lindo code, andaba buscando algo asi, pero me surge una duda.

Abriendo la SqlConnection dentro del using() en caso de que se produsca SqlException no se va a cerrar la conexión o si?


Comentario offtopic, esto es feo:

if (count == 0) return false;
else return true;


porque no hacer:

return count != 0;

[D4N93R]

Siuto xD, me agarraste fuera de base,

No me acuerdo si cierra la conexión si hay un exception dentro del using cuando usas SqlConnection.. Uhmmmm,, lo peor es que no tengo tiempo para probar.

Si tienes un rato libre inténtalo y me cuentas :) Sino, intentaré probarlo el fin de semana.

Es que ando demasiado full, son las 12 de la noche y ahora es que tengo tiempo para revisar el foro :(

Un saludo!