C # Войти веб-форма - PullRequest
       10

C # Войти веб-форма

0 голосов
/ 06 июня 2011

Не могу понять, что я тут не так сделал. Я пытаюсь настроить базовую форму входа для моего приложения, которая проходит аутентификацию в базе данных SQL. Вот код:

public partial class Login : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        lblError.Visible = false;
    }

    protected void btnLogin_Click(object sender, EventArgs e)
    {
        using (SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString))
        {
            myConnection.Open();

            try
            {
                string userID = txtUser.Text;
                string passID = txtPassword.Text;

                SqlDataReader reader = null;
                SqlCommand cmd = new SqlCommand("SELECT UserName, Password From Users WHERE UserName = @user AND Password = @pass", myConnection);

                SqlParameter userParam = cmd.Parameters.Add("@user", SqlDbType.NVarChar, 50);
                SqlParameter passParam = cmd.Parameters.Add("@pass", SqlDbType.NVarChar, 50);

                userParam.Value = userID;
                passParam.Value = passID;

                reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    if (reader["UserName"].ToString() == userID && reader["Password"].ToString() == passID)
                    {
                        Response.Redirect("TaskMonitor.aspx");
                    }

                    else
                    {
                        lblError.Visible = true;
                    }
                }
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            myConnection.Close();
        }
    }
}

Он ничего не делает, независимо от того, введу ли я правильное имя пользователя и пароль или неверный.

Ответы [ 4 ]

4 голосов
/ 06 июня 2011

Поскольку, когда имя пользователя или пароль недействительны, строки не возвращаются и ваш код внутри while не выполняется.

Вы можете изменить его на:

SqlCommand cmd = new SqlCommand("SELECT COUNT(*) From Users WHERE UserName = @user AND Password = @pass", myConnection);
/* ... init parameters etc ... */
if((int)cmd.ExecuteScalar() == 0)
{
    // Access Denied
}
else
{
    // Access Granted
}
1 голос
/ 06 июня 2011

Кроме того, загрузка вашей страницы скрывает метку ошибки, возможно, вы захотите изменить ее следующим образом:

if (!IsPostBack) lblError.Visible = false;

Вы также можете использовать встроенную в ASP.NET аутентификацию форм для обработки сеанса:

FormsAuthentication.RedirectFromLoginPage(userID, false);
0 голосов
/ 06 июня 2011

В настоящее время вы перехватываете все возникающие ошибки и записываете их на консоль, но, как вы сказали ранее, вы разрабатываете веб-приложение, поэтому консоли нет.Поэтому сначала замените оператор Console.writeLine на Response.WriteLine или удалите вместо него полный оператор try и catch.

Во-вторых, если запрос не возвращает никаких результатов, полный оператор if else пропускается.Проще просто проверить, есть ли у читателя какие-либо результаты: если он есть, чем вы запускаете перенаправление, в противном случае, отобразите метку

0 голосов
/ 06 июня 2011

он упоминает обе ситуации

Мое предложение таково: используйте более простой код:

myConnection.Open();
SqlCommand myCommand = new SqlCommand("Select * from myDT", myConnection);
myCommand.Parameters.AddWithValue("user", user.Text);  
SqlDataReader reader = myCommand.ExecuteReader();
if(reader.HasRows)  // i remember there is such a thing !
{

}

// myCommand.Parameters.Add("@user", user.Text); is false as i remember
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...