none
Validar usuario, contraseña y estado RRS feed

  • Pregunta

  • Tengo el siguiente problema:

    Tengo un formulario donde se ponen el usuario y la contraseña. En la bd tengo esos 2 campos y adicionalmente tengo un campo que se llama status.

    Quiero que al tratar de ingresar se valide si es status del usuario es 1 o 0. Si es 1 lo deja continuar sino le muestra un mensaje.

    Aca dejo lo que llevo del código.

    Public Function verificarUsuario()
            Try
    
                Dim query As String = "Select id,rolid,username, CONVERT(VARCHAR(300),DECRYPTBYPASSPHRASE('$$PEPE$$',password)) password, status from usuarios where username = @usuario and password = @contraseña"
    
                Dim comando As SqlCommand
                comando = New SqlCommand(query, conectar)
                comando.Parameters.AddWithValue("@usuario", ingreso.UsernameTextBox.Text)
                comando.Parameters.AddWithValue("@contraseña", ingreso.PasswordTextBox.Text)
                comando.ExecuteNonQuery()
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return 0
        End Function

    Agradezco cualquier sugerencia o ayuda.

    miércoles, 20 de junio de 2012 19:44

Respuestas

  • hola

    pero con el ExecuteNonQuery() y un SELECT no vas a ningun lado, proque no ses suan estos juntos

    Public Function verificarUsuario() As Boolean
    	Try
    
    		Dim query As String = "Select count(*) As cant  from usuarios where username = @usuario and password = @contraseña and status = 1"
    
    		Dim comando As SqlCommand
    		comando = New SqlCommand(query, conectar)
    		comando.Parameters.AddWithValue("@usuario", ingreso.UsernameTextBox.Text)
    		comando.Parameters.AddWithValue("@contraseña", ingreso.PasswordTextBox.Text)
    		Dim cant As Integer = comando.ExecuteScalar()
    		
    		if cant = 0 Then
    			Return False
    		Else
    			Return True
    		End If
    
    	Catch ex As Exception
    		MessageBox.Show(ex.Message)
    		Return False
    	End Try
    	
    End Function

    como veras usas el executescalar para ver si hay un registro coincidente

    ademas el apssword nunca deberia desencriptarse

    Login – Usando Password con Hash

    deberiras usar un hash para conservar el password

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 20 de junio de 2012 20:24

Todas las respuestas

  • hola

    pero con el ExecuteNonQuery() y un SELECT no vas a ningun lado, proque no ses suan estos juntos

    Public Function verificarUsuario() As Boolean
    	Try
    
    		Dim query As String = "Select count(*) As cant  from usuarios where username = @usuario and password = @contraseña and status = 1"
    
    		Dim comando As SqlCommand
    		comando = New SqlCommand(query, conectar)
    		comando.Parameters.AddWithValue("@usuario", ingreso.UsernameTextBox.Text)
    		comando.Parameters.AddWithValue("@contraseña", ingreso.PasswordTextBox.Text)
    		Dim cant As Integer = comando.ExecuteScalar()
    		
    		if cant = 0 Then
    			Return False
    		Else
    			Return True
    		End If
    
    	Catch ex As Exception
    		MessageBox.Show(ex.Message)
    		Return False
    	End Try
    	
    End Function

    como veras usas el executescalar para ver si hay un registro coincidente

    ademas el apssword nunca deberia desencriptarse

    Login – Usando Password con Hash

    deberiras usar un hash para conservar el password

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 20 de junio de 2012 20:24
  • En lugar de un comando.ExecuteNonQuery()

    has los sig:

        Public Function verificarUsuario()
            Try
                Dim conectar As SqlConnection
                Dim query As String = "Select id,rolid,username, CONVERT(VARCHAR(300),DECRYPTBYPASSPHRASE('$$PEPE$$',password)) password, status from usuarios where username = @usuario and password = @contraseña"
     
                Dim comando As SqlCommand
                comando = New SqlCommand(query, conectar)
                comando.Parameters.AddWithValue("@usuario""ingreso.UsernameTextBox.Text")
                comando.Parameters.AddWithValue("@contraseña""ingreso.PasswordTextBox.Text")
                ' comando.ExecuteNonQuery()
     
                Dim dt As New DataTable
                Dim da As New SqlDataAdapter(comando)
                da.Fill(dt)
                Dim variable As String = dt.Rows(0)(5).ToString() ' Aqui teienes el valor del status
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return 0
        End Function

    Ahora bien segun veo tu fucnion siempre retorna 0, si es asi te recomiendo usar un Sub en lugar de una Funcion.

    Saludos

    _______________________
    Edward J. Ocando. | Director de Desarrollo & Tecnología | Proiecto.com
    Telefono.+58 (212) 868.90.33 | Edward.Ocando@Proiecto.com


    • Editado Edward Ocando jueves, 21 de junio de 2012 14:49 Error en la respuesta anterior
    miércoles, 20 de junio de 2012 20:56
  • Edward

    estas seguro lo que estas escribiendo ?

    digo un SEELCT con el ExecuteNonQuery carga un datatable ? eso lo has intentado anteriormente


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 20 de junio de 2012 21:04
  • yo lo haria de la siguiente manera:

    crear un procedimiento almacenado en sql server que seleccione los usuarios que tengan el status en 1(activo)  y con este

    procedimiento cargo un combobox en el formulario del login, asi te aseguras que el usuario escojera un usuario que exista en la BD y a la

    vez tenga 1 en su status.....

    viernes, 22 de junio de 2012 7:07