2011-01-13 3 views
0

Я занимаюсь разработкой веб-сайта ASP.NET. На моем сиде есть несколько страниц, которые я хочу видеть, только если он является зарегистрированным пользователем. Если нет, он должен быть перенаправлен на соответствующую страницу. Должен ли я проверять это на событии Page_load, которое пользователь вошел в систему или нет?Запретить пользователю посещать определенные страницы до регистрации

Если пользователь вводит имя URL-адреса, это все равно будет работать, верно?

ответ

0

Вот что я делаю для некоторых простейших сайтов. Он использует типичный forms authentication. От global.ascx.cs:

protected void Application_PostAuthenticateRequest(object sender, EventArgs e) 
{ 
    var unsecuredPages = new[] 
          { 
           "test.htm", 
           "email.htm" 
          }; 

    bool letThrough = unsecuredPages.Any(s => Request.RawUrl.ToLowerInvariant().Contains(s)); 
    if (letThrough) 
    { 
     return; 
    } 

    if (!User.Identity.IsAuthenticated && 
     !Request.RawUrl.Contains(FormsAuthentication.LoginUrl)) 
    { 
     FormsAuthentication.SignOut(); 
     FormsAuthentication.RedirectToLoginPage(); 
    } 
} 

Вы явно указать страницы, которые должны быть доступны для всех пользователей и все другие запросы будут перенаправляться на страницу входа в систему. Моя web.config выглядит примерно так:

<authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" protection="All" timeout="480" name="xyz" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="Default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="true"/> 
</authentication> 
<location path="Styles"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 
+0

Есть ли причина, по которой вы не просто добавляете элементы для этих двух незащищенных страниц, как у вас для папки стилей? – patmortech

+0

Не совсем, я просто предпочитаю, чтобы он был там, а не в файле конфигурации, так что другие люди не возились с ним. У вас может быть противоположное требование. –

+0

Когда я пишу приведенный выше код 'var unsecuredPages = new []' в Global.asax.cs, он запрашивает тип данных, который будет указан после нового: - / – Cipher

0

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

Вы также можете использовать аутентификацию форм, как описано выше, в разделе @HeavyWave.