Subit Timalsina Ответов: 1

Как узнать, какой пользователь вошел в систему


У меня есть страница входа в систему. Существует таблица с именем user_privilege и столбец с именем user_type. Теперь я хочу узнать, какой пользователь вошел в систему, чтобы мы могли позволить им войти в свои соответствующие области. Мне трудно понять, как это сделать

Что я уже пробовал:

protected void btnLogin_Click(object sender, EventArgs e)
        {
            using (SqlConnection con = new SqlConnection(@"Data Source =DESKTOP- 
            RVF1OET\SQLEXPRESS; Initial Catalog = ClothStockManagement; Integrated 
            Security = True;"))
            {
                con.Open();
                string query = "select count(1) from user_privilege where 
                user_id=@username and password=@password";

                string userType= "select user_type from user_privilege";

                SqlCommand cmd = new SqlCommand(query, con);
                cmd.Parameters.AddWithValue("@username", userNameBox.Text.Trim());
                cmd.Parameters.AddWithValue("@password", passwordBox.Text.Trim());
                int count = Convert.ToInt32(cmd.ExecuteScalar());
                if (count == 1)
                {
                 if (userType == "Staff")
                    {

                        messageBox.Text = "Staff";
                        Response.Redirect("test.aspx");
                        
                    }
                    else
                    {
                        Session["admin"] = userNameBox.Text;
                        Response.Redirect("AdminDashboard.aspx");
                        messageBox.Text = "Ad";
                    }
                }

                else
                {
                    messageBox.Text = "Failed";
                }
            }
        }

1 Ответов

Рейтинг:
11

Wendelius

Прежде всего, никогда не храните пароли в виде обычного текста. Взгляните на это Хранение паролей: как это сделать.[^]

Что касается самого вопроса, то вместо подсчета записей выберите фактические данные. Другими словами что-то вроде

string query = "select user_type from user_privilege where 
                user_id=@username and password=@password";


Затем вы можете использовать Свойство sqlcommand.Метод ExecuteReader (System.Data.SqlClient)[^] для выполнения запроса и изучения возвращенных данных.

ДОПОЛНЕНИЕ

В качестве примера samll использования считывателя рассмотрим следующее. Обратите внимание, что это не устраняет проблему с паролем.
...
con.Open();
string query = "select user_type from user_privilege where user_id=@username and password=@password";

SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@username", userNameBox.Text.Trim());
cmd.Parameters.AddWithValue("@password", passwordBox.Text.Trim());

SqlDataReader reader = command.ExecuteReader();
if  !(reader.Read()) {
   messageBox.Text = "User not found";
   Response.Redirect("test.aspx");
} else  if (reader[0].ToString() == "Staff") {
   messageBox.Text = "Staff";
   Response.Redirect("test.aspx");
} else  {
   Session["admin"] = userNameBox.Text;
   Response.Redirect("AdminDashboard.aspx");
   messageBox.Text = "Ad";
}

else
{
    messageBox.Text = "Failed";
}
...


Subit Timalsina

Большое спасибо братан за предложение я попробую выполнить хеширование но это мой первый раз когда я работаю с такими вещами можете ли вы предоставить его здесь если это возможно

Wendelius

Не знаю, что вы имеете в виду, но в подсказке есть какой-то код, почти готовый к использованию.

Или вы имеете в виду что-то другое?

Subit Timalsina

Я пробовал, но это не работает
Вы имели в виду это правильно
строка пользовательского = "выбрать user_type от user_privilege где user_id =@username и Password =@пароль";
SqlCommand cmd = new SqlCommand(userType, con);
cmd.параметры.AddWithValue ("@username", userNameBox.Text.Trim());
cmd.параметры.AddWithValue("@пароль", безусловно, самый простой способ.Текст.Отделка());
int count = конвертировать.ToInt32(cmd.ExecuteScalar());

Wendelius

Сейчас команда выглядит лучше. Я бы посоветовал сначала попытаться заставить его работать, не беспокоясь о пароле. Когда вы получите соответствующие данные, то сосредоточьтесь на проблеме пароля.

Проблема с паролем не устраняется только внесением изменений в инструкцию SELECT, вам также необходимо изменить вставку данных в таблицу user_privilege. Вот почему потребуется еще некоторое усилие, чтобы заставить его работать.

Wendelius

О, еще одна вещь, вы больше не получаете счет, так что не пытайтесь использовать возвращаемое значение таким образом. Взгляните на пример в MS docs, который я связал с ответом. В нем описывается, как использовать метод Read для чтения строк.

Subit Timalsina

Я новичок в c# извините, если я действительно плохой

Wendelius

Смотрите обновленный ответ

Subit Timalsina

это бросает ошибку в условие else if
Оператор '==' не может быть применен к операндам типа 'method group' и 'string'

Wendelius

Кажется, я забыл скобку в конце вызова метода ToString. Теперь исправлено.