AhmedHosny96 Ответов: 1

Войти с помощью роли в ASP.NET


Эй ребята я разработал веб сайт
у меня есть для пользователей (администратор и пользователи) также у меня есть две таблицы базы данных, а именно(tableUsers,tableAdmins) так что я хочу, это чтобы проверить, является ли текущий пользователь является администратором или студент и перенаправление к их собственным корреспондентом страницы, как (для админ/админ.aspx-файл,
для пользователя home.aspx)
спасибо тебе..

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

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

string s = ConfigurationManager.ConnectionStrings["RegistrationConnectionString2"].ConnectionString;

protected void LoginButton_Click1(object sender, EventArgs e) {

    if (Page.IsValid) {

        using (SqlConnection con = new SqlConnection(s)) {
            SqlCommand cmd = new SqlCommand("spUserlogin", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@username", TextBoxUsername.Text);
            cmd.Parameters.AddWithValue("@password", TextBoxPassword.Text);

            SqlCommand cmd1 = new SqlCommand("spAdminlogin");
            cmd1.CommandType = CommandType.StoredProcedure;

            try {
                con.Open();
                int value = (int)cmd.ExecuteScalar();
                if (value == 1) {

                    if (CheckBox1.Checked) {
                        HttpCookie user = new HttpCookie("user_cookies");       //creating cookie object where user_cookies is cookie name
                        user["New"] = TextBoxUsername.Text;             //cookie content
                        user.Expires = DateTime.Now.AddYears(3);            // give the time/duration of cookie
                        Response.Cookies.Add(user);                     // it gives the response in browser
                    }
                    else {
                        Session["New"] = TextBoxUsername.Text;
                    }
                    Response.Redirect("home.aspx");
                }
                else {
                    Label_Login.Visible = true;
                    Label_Login.Text = "Use Correct username and password";

                }

            }

            catch (Exception ex) {
                labelError.Visible = true;
                labelError.Text = "Something went wrong! Contact your devloper " + ex.Message;
            }
        }
    }

}

MadMyche

Не могли бы вы добавить немного кода, чтобы мы могли увидеть, что вы пробовали, и иметь представление о том, с чем мы работаем?

AhmedHosny96

да вот моя страница login.aspx за кодом
строка s = ConfigurationManager.ConnectionStrings["RegistrationConnectionString2"].Параметр connectionString;

охраняемых недействительными LoginButton_Click1(объект отправителя, EventArgs в электронной)
{

если (стр.Функция IsValid)
{

using (SqlConnection con = new SqlConnection(s))
{
SqlCommand cmd = new SqlCommand("spUserlogin", con);
УМК.CommandType = CommandType.Хранимая процедура;
cmd.параметры.AddWithValue ("@username", TextBoxUsername.Текст);
cmd.параметры.AddWithValue ("@password", TextBoxPassword.Text);

SqlCommand cmd1 = new SqlCommand("spAdminlogin");
cmd1.Свойство Commandtype = Значение Commandtype.Хранимая процедура;

пробовать


{
против.Открыть();
int value = (int)cmd.Executescalar так();
если (значение == 1)
{

если (CheckBox1.Проверено)
{
HttpCookie user = new HttpCookie("user_cookies"); //создание объекта cookie, где user_cookies-это имя файла cookie
user["New"] = TextBoxUsername.Текст; // содержимое файлов cookie
пользователь.Expires = DateTime.Now.AddYears(3); // укажите время/длительность файла cookie
Ответ.Cookies.Add(user); // он дает ответ в браузере
}
еще
{
Session["New"] = TextBoxUsername.Текст;
}
Ответ.Перенаправление("home.aspx");
}
еще
{
Label_Login.Видимое = истинное;
Label_Login.Text = "используйте правильное имя пользователя и пароль";

}

}

поймать (исключение бывший)
{
labelError.Видимое = истинное;
labelError.Текст = "что-то пошло не так! Свяжитесь с вашим devloper " + ex.сообщение;
}
}
}

}
}

1 Ответов

Рейтинг:
2

MadMyche

Самое быстрое и уродливое, что можно сделать, - это изменить вызываемую хранимую процедуру и заставить ее ссылаться на вторую таблицу, а также вернуть что-то полезное, чтобы различить, были ли они найдены в таблице пользователя или администратора.

Однако я не рекомендую и не оправдываю это, и у меня есть множество рекомендаций и/или проблем.

У вас должна быть одна таблица для входа всех пользователей. Эта таблица должна либо иметь столбец для указания типа пользователя(например, роль, IsAdmin), либо ссылаться на другую таблицу(ы) для ролей/разрешений.

Вы передаете пароль в свою хранимую процедуру в виде обычного текста. Является ли пароль в таблице также обычным текстом? Зашифровано ли соединение с сервером БД?
Если что - то из этого правда, я бы рекомендовал повысить безопасность... Существует множество примеров для таких подпрограмм, как BCrypt.

Прямо сейчас это выглядит так, как будто ваша хранимая процедура возвращает только целое значение 1, которое выглядит так, как будто это означает, что они разрешены. Вы можете изменить процедуру, чтобы показать не только, прошли ли они проверку подлинности, но и какова их роль. Если они находятся в том, что сейчас является пользовательской таблицей, продолжайте возвращать 1 и следуйте текущему пути. Но если они были в том, что сейчас является таблицей администратора, верните 2 и сделайте новый путь для создания своего файла cookie и отправьте им страницу Admin.aspx.

Я также дам вам похвалу - при сбое аутентификации он не указывает, было ли имя пользователя или пароль неправильными, просто они были неправильными.