在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
循环来完成验证任务。我该怎么办?
答案 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