如何使多个用户的登录页面代码更简单?

时间:2014-03-17 10:19:28

标签: vb.net

在VB.NET项目中,我正在尝试创建一个用户可以使用表单登录的登录页面。我使用数组来保存登录信息。但是,在验证时它很复杂,因此我无法通过向数组添加项目来添加用户。我需要在代码中添加else if,因此非常不方便。

代码如下:

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
    Dim UserNameAvailable As Integer = 0
    Dim UsernameList(2) As String
    Dim PasswordList(2) As String
    UsernameList(0) = "jamiechoi"
    PasswordList(0) = "198237645"
    UsernameList(1) = "marcoyeung"
    PasswordList(1) = "infotalkong"
    UsernameList(2) = "user"
    PasswordList(2) = "toolbox"
    Dim InputUsername As String
    InputUsername = UsernameTextBox.Text
    Dim InputPassword As String
    InputPassword = PasswordTextBox.Text
    If InputUsername = UsernameList(0) Then
        If InputPassword = PasswordList(0) Then
            Me.Hide()
            AdminArea.Show()
            UserNameAvailable = 1
        Else
            MsgBox("Wrong Password!")
            UserNameAvailable = 1
        End If
    ElseIf InputUsername = UsernameList(1) Then
        If InputPassword = PasswordList(1) Then
            Me.Hide()
            AdminArea.Show()
            UserNameAvailable = 1
        Else
            MsgBox("Wrong Password!")
            UserNameAvailable = 1
        End If
    ElseIf InputUsername = UsernameList(2) Then
        If InputPassword = PasswordList(2) Then
            Me.Hide()
            AdminArea.Show()
            UserNameAvailable = 1
        Else
            MsgBox("Wrong Password!")
            UserNameAvailable = 1
        End If
    End If

    If UserNameAvailable = 0 Then
        MsgBox("Wrong Username!")
    End If
End Sub

我希望我可以使用for循环来完成验证任务。我该怎么办?

3 个答案:

答案 0 :(得分:3)

我想这只是一个编程练习而不是真实世界的应用程序(至少我希望如此)所以我不会深入了解整个 never-hardcode-secret-informations-in-您的代码 -thing。


用户名和密码具有一对一的关系(每个用户名都有一个密码),因此在代码中表达这一点是明智的。

最简单的方法是使用Dictionary创建映射用户名 - >密码。然后我们可以使用TryGetValue检查用户名是否存在并检索密码:

Private Sub OK_Click(sender As System.Object, e As System.EventArgs) Handles OK.Click
    Dim credentials = New Dictionary(Of String, String) From _
    {
        {"jamiechoi", "198237645"},
        {"marcoyeung", "infotalkong"},
        {"user", "toolbox"}
    }

    Dim passwd As String
    If credentials.TryGetValue(UsernameTextBox.Text, passwd) AndAlso passwd = PasswordTextBox.Text Then
        Me.Hide()
        AdminArea.Show()
    Else
        MsgBox("Wrong User/Password!")
    End If

End Sub

请注意,在实际应用程序中,您不会将用户名/密码存储在代码中,而是存储在例如一个数据库,你只需要存储密码的盐渍哈希,而不是明文。

答案 1 :(得分:1)

很抱歉这么晚回答(并且没有接受答案),因为答案的结果出乎意料。

这是我预期的解决方案:

(类似的东西)

For i As Integer = 1 To UsernameList.Length
    If InputUsername = UsernameList(i) AndAlso InputPassword = PasswordList(i) Then
        Me.Hide()
        AdminArea.Show()
    End If
Next

这就是我的解决方案。

答案 2 :(得分:0)

这是我对代码的一点更正:

For i As Integer = 0 To UsernameList.Length - 1
    If InputUsername = UsernameList(i) AndAlso InputPassword = PasswordList(i) Then
        Me.Hide()
        AdminArea.Show()
    End If
Next