Аутентификация при входе всегда возвращает true - PullRequest
2 голосов
/ 18 февраля 2012

Мой код запрашивает сервер, который, если введены правильные имя пользователя и пароль, возвращает символ «+».В противном случае это не так.Плохая практика, но я просто использую эту идею для изучения C # и ASP.NET, в которых я новичок (ранее я писал программу на JSP).

Моя проблема:

  • В настоящее время у меня, похоже, есть какая-то ошибка, из-за которой мои методы всегда возвращают 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>

1 Ответ

5 голосов
/ 18 февраля 2012

Вы начинаете с isValid=true, но если ваша программа не может даже быть в состоянии подключиться к серверу, isValid остается верным.

Так что, возможно, ваши пользователи вообще не проверяют, вы начинаете сisValid и заканчивается тем же самым, даже если проверка не выполнена.

Код, как он есть, я начну с false и удалю одну строку.

// 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 является существующим параметром в веб-форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...