2012-02-18 2 views
2

Mon code interroge un serveur qui, si l'utilisateur et le mot de passe sont corrects, renvoie le caractère "+". Sinon, ce n'est pas le cas. Mauvaise pratique, mais j'utilise juste cette idée pour apprendre C# et ASP.NET dont je suis un débutant (j'ai déjà écrit le programme dans JSP).L'authentification de connexion retourne toujours vrai

Mon problème:

  • , il me semble actuellement avoir une erreur qui provoque mes méthodes pour revenir toujours vrai. Cela ne devrait pas être le cas. Cela ne devrait être que vrai lorsque les nom d'utilisateur/passe sont authentifiés.
  • Je veux qu'il affiche le formulaire de connexion seulement si l'utilisateur n'est pas connecté et qu'une session n'a pas été commencée - quelle est la meilleure façon d'adapter mon code pour faire ceci?

Mon code à ce jour:

@{ 
    // 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

S'il vous plaît éviter d'inclure des choses comme 'C#/Razor/ASP.NET' dans le titre de votre question. C'est ce que les tags sont pour. –

+0

Désolé pour ça! :) –

+0

Vous pouvez empiler les instructions Using (instructions imbriquées) de sorte qu'il n'y a pas besoin d'autant de jeux de parenthèses. – Lloyd

Répondre

5

Vous commencez avec isValid=true mais si votre programme ne peut même pas être en mesure de se connecter au serveur le isValid est rester fidèle.

Alors peut-être que vos utilisateurs ne valideront même pas du tout, vous commencez par isValid et finissez par le même, même si la validation n'est pas faite.

Le code tel qu'il est, je vais commencer avec faux, et supprimer une ligne.

// 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 
      } 
     } 

Également être ware que Page. IsValid est un paramètre existant sur le formulaire Web.

+1

(blague: si l'authentification de connexion retourne toujours vrai, puis montre les informations importantes aux utilisateurs non authentifiés :) – Aristos

+0

Haha, oui c'est une version (légèrement) réduite de mon programme complet. J'ajoute quelques informations supplémentaires dans la version complète. Je me suis adapté pour utiliser vos changements maintenant, mais malheureusement, il dit toujours qu'il a authentifié (imprime "IT WORKS!")! –

+0

@SimonKiely pouvez-vous déboguer votre code pour voir quelle réponse ont sur le retour? – Aristos

Questions connexes