каков наилучший способ сделать так, чтобы некоторые страницы в asp.net требовали входа в систему?
-
20-08-2019 - |
Вопрос
Я работаю с asp.net проектом веб-сайта, в котором некоторые страницы нуждаются в аутентификации.Я использую asp.net подписку.
Я прочитал несколько ответов.например ,поместите все эти страницы в папку и создайте внутренний web.config, который описывает привилегии.Это один из способов решения проблемы, но мне нужен более исправимый и эффективный способ.
Решение
Если вы не хотите жестко кодировать это в web.config (ах), вам нужно будет реализовать элемент управления типа "Базовая страница".
Ваш базовый класс страницы должен наследоваться от System.Web.UI.Page и должен иметь метод, который вы могли бы вызвать, чтобы сказать "Пользователь должен войти в систему" или "Пользователь должен быть в роли x", и если пользователь не в этой роли, перенаправить на страницу входа (вы можете получить это, вызвав Проверка подлинности форм.loginUrl).
Ваши фактические страницы должны наследоваться от этого класса, а не напрямую от System.Web.UI.Page.Затем, в чем-то вроде Init или в верхней части Page_Load , вызовите
base.UserMustBeLoggedIn();
или
// Replace "AccessRole" with the name of your role
base.UserMustBeInRole("AccessRole");
И пусть с этим справится базовая страница.
Если вы предпочитаете, чтобы права доступа хранились в базе данных, то вы могли бы перенести всю обработку на базовую страницу и в подходящем месте жизненного цикла страницы сопоставить текущий URL с таблицей вашей базы данных, роль пользователя / аутентификацию с требованиями и перенаправить при необходимости.
Обратите внимание, что вы можете создать безопасность на уровне страницы в веб-конфигурации следующим образом:
<configuration>
<location path="LockedPage.aspx">
<system.web>
<authorization>
<!-- Deny access to anonymous users -->
<deny users="?"/>
</authorization>
</system.web>
</location>
</configuration>
Более подробная информация доступна на сайте MSDN: Элемент Местоположения и Элемент Авторизации.
Другие советы
Вы можете попробовать этот код, В событии загрузки главной страницы напишите этот код, добавить свойство
public bool m_bLoginRequired = true;
public bool IsLoginRequired
{
get { return m_bLoginRequired; }
set { m_bLoginRequired = value; }
}
try
{
// Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
Response.Cache.SetNoStore();
if (IsLoginRequired==true)
{
if ( Session.IsNewSession || HttpContext.Current.Session["Username"] == null)
{
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage("Session Expired");
Response.End();
}
}
}
catch (Exception ex)
{
throw (ex);
}
теперь на странице входа вам нужно написать этот код
FormsAuthentication.SetAuthCookie(this.txt_UserName.Text.Trim(), false); FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txt_UserName.Text.Trim(), DateTime.Now, DateTime.Now.AddMinutes(10), false, "HR");
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
cookie.Name = "jay";
Session["UserName"] = txt_UserName.Text.Trim();
Response.Cookies.Add(cookie);
txt_UserName.Text = "";
txt_Password.Text = "";
Response.Redirect("HomePage2.aspx");
теперь вы можете добавить событие pageinit на страницу входа в систему
protected void Page_PreInit(object sender, EventArgs e)
{
Master.IsLoginRequired = false;
}
если вы хотите, чтобы пользователь мог получить доступ к несанкционированной странице, тогда в событии pageinit этой страницы
установите Master.IsLoginRequired=false;
также укажите логин в файле web.config
.