2012-02-18 9 views
2

私のコードは、ユーザとパスワードが正しい場合に "+"文字を返すサーバに問い合わせています。さもなければそれはしません。悪い習慣ですが、私は初心者であるC#とASP.NETを学ぶためにこのアイデアを使用しています(以前はJSPでプログラムを書いていました)。ログイン認証は常にtrueを返します

私の問題:

  • 現在、私は常にtrueを返し に私の方法を引き起こし、いくつかのエラーを持っているように思われます。これは当てはまりません。ユーザー名/パスが認証された場合は、 になります。
  • ユーザがログインしていない場合にのみログインフォームを表示したい場合は、 セッションが開始されていません。このために私の コードを適合させる最良の方法は何ですか?

これまでの私のコード:

@{ 
    // Initialize general page variables 
    string username = ""; 
    string password = ""; 
    bool rememberMe = false; 

    // Validation 
    bool isValid = true; 

    // If this is a POST request, validate and process data 
     if (IsPost) { 
      username = Request.Form["username"]; 
      password = Request.Form["password"]; 
      rememberMe = Request.Form["remember"].AsBool(); 

      // Attempt to login to the external authentication server 
      if(isValid){ 
       using (TcpClient client = new TcpClient("hosty.host.com", 110)) { 
       using (NetworkStream stream = client.GetStream()) { 
       using (StreamReader reader = new StreamReader(stream)) { 
       using (StreamWriter writer = new StreamWriter(stream)) { 
        writer.WriteLine("USER " + username); 
        writer.WriteLine("PASS " + password); 
        string response = reader.ReadLine(); 
        isValid = response[ 0 ] == '+'; 
        Response.Write(response); 
        writer.WriteLine("quit\n"); 
       } 
       } 
       } 
       } 
      } 

      if (isValid) { 
       <text>IT WORKED---></text> 
      //USER LOGGED IN/ SESSION STARTED 


      } else { 
       <text>IT DIDNT WORK :(</text> 
       //USER NOT LOGGED IN, SESSION NOT STARTED 
      } 
     } 
    } 
     <h2>Login Here</h2> 
     <form action="" method="post"> 
      <fieldset> 
      <legend>Login Form</legend> 
      <label for="username">Username: 
       <input type="text" name="username" id="username" value="" /> 
      </label> 
      <label for="password">Password: 
       <input type="password" name="password" id="password" value="" /> 
      </label> 
      <label for="remember"> 
       <input class="checkbox" type="checkbox" name="remember" id="remember" checked="checked" /> 
       Remember me</label> 
      <p> 
       <input type="submit" name="login" id="login" value="Login" /> 
       &nbsp; 
       <input type="reset" name="reset" id="reset" value="Reset" /> 
      </p> 
      </fieldset> 
     </form> 
     </div> 
      </fieldset> 
     </form> 
+0

質問タイトルに 'C#/ Razor/ASP.NET'のようなものは含めないようにしてください。それがタグのためのものです。 –

+0

申し訳ありません! :) –

+0

usingステートメント(ネストされたステートメント)をスタックすることができますので、中括弧のセットをあまり必要としません。 – Lloyd

答えて

5

あなたはisValid=trueで始まるが、あなたのプログラムもisValidが真のままであるサーバーに接続できないことができるかどうか。

あなたのユーザーはまったく検証さえしないかもしれません。検証が行われていなくても、isValidで始まり同じで終わることがあります。

コードはそのままで、私はそれを偽で開始し、1行を削除します。

// Validation 
    bool isValid = false; 

    // If this is a POST request, validate and process data 
     if (IsPost) { 
      username = Request.Form["username"]; 
      password = Request.Form["password"]; 
      rememberMe = Request.Form["remember"].AsBool(); 

      // Attempt to login to the external authentication server 
      // if(isValid) 
      { 
       using (TcpClient client = new TcpClient("hosty.host.com", 110)) { 
       using (NetworkStream stream = client.GetStream()) { 
       using (StreamReader reader = new StreamReader(stream)) { 
       using (StreamWriter writer = new StreamWriter(stream)) { 
        writer.WriteLine("USER " + username); 
        writer.WriteLine("PASS " + password); 
        string response = reader.ReadLine(); 
        isValid = response[ 0 ] == '+'; 
        Response.Write(response); 
        writer.WriteLine("quit\n"); 
       } 
       } 
       } 
       } 
      } 

      if (isValid) { 
       <text>IT WORKED---></text> 
      //USER LOGGED IN/ SESSION STARTED 


      } else { 
       <text>IT DIDNT WORK :(</text> 
       //USER NOT LOGGED IN, SESSION NOT STARTED 
      } 
     } 

そのページもあります。 IsValidはウェブフォームの既存のパラメータです。

+1

(ジョーク:ログイン認証が常にtrueを返す場合は、認証されていないユーザーに重要な情報を表示してください:) – Aristos

+0

ハハ、はい、これは私のフルプログラムの(やや)カットバージョンです。私はフルバージョンでいくつかの情報を追加します。私は今あなたの変更を使用するように適応しましたが、残念ながらそれはまだそれが認証されていると言います( "IT WORKS!"を印刷します)! –

+0

@SimonKielyあなたのコードをデバッグして、返された応答を確認できますか? – Aristos

関連する問題