0

次のコードがあります。

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
    Using sr As New StreamReader(strUsersPath)
        Dim line = sr.ReadLine
        Dim sline As String()
        Do While (Not line Is Nothing)
            sline = line.Split("|")
            If sline(0) = tbUsername.Text And sline(1) = tbPassword.Text Then
                Form2.Show()
                Me.Hide()
                Exit Sub
            Else
                line = sr.ReadLine
                If sline(0) = tbUsername.Text Then
                    MsgBox("Invalid password!")
                End If
                If line = Nothing Then
                    MsgBox("Failed login")
                End If
            End If
        Loop
        End Using

End Sub  

ログイン ボックスにこのコードを使用しようとしています。tbUsername と tbPassword の 2 つのテキスト ボックスがあります。ユーザーがログインをクリックすると、コードは us​​ers.txt ファイル (strUsersPath 内) を開き、一致するログインが見つかるまでループします。 . ユーザー名が間違っている場合は、メッセージボックス (「無効なパスワード!」) が表示され、ユーザー名またはパスワードが見つからない場合は、別のメッセージ (「ログインに失敗しました!」) が表示されます。

ただし、私の問題は、コードを実行すると、詳細が正しい場合はログインが正常に機能することですが、そうでない場合は、両方のメッセージボックスが表示されます (「無効なパスワード」+「ログインの失敗」)。ループは続きますが、私が望む方法で構文を解決できないようです。何か助けはありますか?

4

2 に答える 2

1

ファイルの処理を停止する必要がある状況に陥った場合は、Exit Do を呼び出します。これにより、回答が既にわかっている場合 (有効なログインまたは無効なパスワード)、ループがファイルを完全に通過するのを防ぐことができます。

If sline(0) = tbUsername.Text Then
  MsgBox("Invalid password!")
  Exit Do
End If

また、2 番目の If 条件は冗長です。行が何もないときにループが終了するため、反復ごとにチェックするのを避けて、ループの後に置くことができます。そこにたどり着く唯一の方法は、無効なログインを持つことです。

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
    Using sr As New StreamReader(strUsersPath)
        Dim line = sr.ReadLine
        Dim sline As String()
        Do While (Not line Is Nothing)
            sline = line.Split("|")
            If sline(0) = tbUsername.Text And sline(1) = tbPassword.Text Then
                Form2.Show()
                Me.Hide()
                Exit Sub
            Else
                line = sr.ReadLine
                If sline(0) = tbUsername.Text Then
                    MsgBox("Invalid password!")
                End If
            End If
        Loop
        End Using
     MsgBox("Invalid Login")
End Sub

最後に、ハッシュ化またはソルト化されていないユーザー ログイン用のプレーン テキスト ファイルのループは、アプリケーションを保護するためのあまり良い方法ではないため、これが実際に安全であるべきシステムではないことを心から願っています。

于 2013-11-03T21:53:19.420 に答える
0

これにアプローチする別の方法を次に示します。

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
    Using sr As New StreamReader(strUsersPath)
        Dim line As String = sr.ReadLine
        Do While Not IsNothing(line)
            If line.StartsWith(tbUsername.Text & "|") Then
                If line = tbUsername.Text & "|" & tbPassword.Text Then
                    Form2.Show()
                    Me.Hide()
                Else
                    MsgBox("Invalid password!")
                End If
                Exit Sub
            End If
            line = sr.ReadLine
        Loop
    End Using
    MsgBox("Failed login")
End Sub
于 2013-11-03T23:46:26.123 に答える