каков наилучший способ сделать так, чтобы некоторые страницы в asp.net требовали входа в систему?

StackOverflow https://stackoverflow.com/questions/477607

Вопрос

Я работаю с 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top