Vb.net 输入正确的用户和密码时,登录不起作用

Vb.net 输入正确的用户和密码时,登录不起作用,vb.net,Vb.net,我们看不到第一个方法的开头,但根据我们所看到的,我猜它在继续之前会检查IsValidated函数。IsValidated不会返回True,因此第一个方法的其余部分甚至不会尝试运行密码检查。IsValidated应该更像这样: Try Dim connString As String = ConfigurationManager.ConnectionStrings("dbx").ConnectionString Dim cmdString As String

我们看不到第一个方法的开头,但根据我们所看到的,我猜它在继续之前会检查IsValidated函数。IsValidated不会返回True,因此第一个方法的其余部分甚至不会尝试运行密码检查。IsValidated应该更像这样:

    Try
        Dim connString As String = ConfigurationManager.ConnectionStrings("dbx").ConnectionString
        Dim cmdString As String = "SELECT * FROM Users WHERE UserName = @UserName AND Password = @Password"

        Using conn As New OleDbConnection(connString)
             Using cmd As New OleDbCommand(cmdString, conn)
                conn.Open()
                cmd.Parameters.AddWithValue("@UserName", TextBox1.Text)
                cmd.Parameters.AddWithValue("@Password", TextBox2.Text)

                Dim reader As OleDbDataReader = cmd.ExecuteReader
                dtRowsReturned.Load(reader)
            End Using
        End Using

        If dtRowsReturned.Rows.Count > 0 Then
            Me.Hide()
            Dim dss As New Form1()
            dss.ShowDialog()
        Else
            MessageBox.Show("Account/Password is incorrect Please try again", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If

    Catch ex As ApplicationException

        MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        TextBox1.Clear()
        TextBox2.Clear()
        TextBox1.Focus()
    End Try
End Sub

Private Function IsValidated() As Boolean
    If TextBox1.Text.Trim = String.Empty Then
        MessageBox.Show("Account Required.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        TextBox1.Focus()
        Return False
    End If
    If TextBox2.Text.Trim = String.Empty Then
        MessageBox.Show("Passwrd Requried.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        TextBox2.Focus()
    End If

    Return False  
End Function
当我在这里时,将密码直接存储在数据库列中是绝对不好的。您需要为每个用户的salt值添加一列。当用户设置新密码时,您将salt值预先挂起到密码,然后针对结果运行加密哈希,如。然后可以将该散列值存储在数据库中。当有人尝试登录时,您将salt添加到其尝试的密码前,运行相同的加密哈希算法,并将结果与存储在数据库中的哈希值进行比较。任何比这少的东西都是不安全和业余的


这只是开始。还需要考虑内存安全性,如SecureString、传输安全性、重置进程等。简而言之,您不希望自己编写此代码,也不希望以任何方式参与构建自己的身份验证系统。很容易得到看似正确的结果——甚至通过了严格的单元测试,但在微妙的方面是错误的,以至于一年后你发现自己在六个月前被黑客攻击了。相反,请尽可能依赖您选择的平台已经提供的身份验证工具。

为了将来的参考,请在提交之前查看您的问题预览,如果格式混乱,请不要提交。标题中的几个词和代码块是不够的。你需要提供一个完整而清晰的解释,说明你在努力实现什么,以及你是如何实现的。如果您尚未调试代码,即设置断点并逐行执行,请立即执行该操作。@jmcilhinney谢谢请告诉我您没有以明文形式存储密码?@JoelCoehoorn谢谢
Private Function IsValidated() As Boolean
    If String.IsNullOrWhiteSpace(TextBox1.Text) Then
        MessageBox.Show("Account Required.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        TextBox1.Focus()
        Return False
    End If
    If String.IsNullOrWhiteSpace(TextBox2.Text) Then
        MessageBox.Show("Passwrd Requried.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        TextBox2.Focus()
        Return False
    End If

    Return True
End Function