Каков наилучший способ сделать некоторые страницы в asp.net требуют входа в систему? - PullRequest
6 голосов
/ 25 января 2009

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

Я прочитал несколько ответов. например сделайте все эти страницы в папке и создайте внутренний web.config, который описывает привилегию. Это один из способов решения проблемы, но мне нужен способ, который был бы более исправим и эффективен.

Ответы [ 2 ]

20 голосов
/ 25 января 2009

Если вы не хотите жестко кодировать это в web.config (s), вам нужно реализовать элемент управления типа «Базовая страница».

Ваш базовый класс страницы должен наследоваться от System.Web.UI.Page и должен иметь метод, который вы можете вызвать, чтобы сказать «Пользователь должен войти в систему» ​​или «Пользователь должен быть в роли x», и если пользователь не в этой роли, перенаправьте на страницу входа в систему (вы можете получить это, позвонив FormsAuthentication.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: Элемент местоположения и Элемент авторизации .

3 голосов
/ 20 марта 2009

Вы можете попробовать этот код, В событии загрузки главной страницы напишите этот код, добавить недвижимость

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.

...