2009-04-28 2 views
1
  • У меня есть одно веб-приложение asp.net.
  • Он использует двух поставщиков членства.
  • Две страницы входа для каждого провайдера.
  • Теперь у меня есть две папки в корне Folder1 & Folder2
  • Folder1 использует 1-поставщика членства
  • Folder2 использует 2-го поставщика членства

я получил почти все работает в том числе и для входа в аккаунт, создать пользователя и т.д. в обоих провайдера. Только проблема заключается в аутентификации формы. Я могу определить только один путь для входа. Поэтому, когда сессия заканчивается или требуется вход для доступа к защищенным страницам. он может только перезаписываться на один знак на странице.Несколько страниц в одном приложении asp.net

Также этот раздел не может быть определен по местоположению. только по заявке.

Как я могу получить папку2 для использования 2-го знака на странице?

  • Если есть что-нибудь, что я могу определить по местоположению?
+0

Есть ли у вас 2 разных аргумента URL или строки запроса, чтобы направить пользователя на правильную страницу входа? – cgreeno

ответ

1

How to override/change FormsAuthentication LoginUrl in certain cases См

Он появляется из различных людей, исследующих, что вы не можете сказать FormsAuthentication иметь две разные страницы входа в систему. Но нет ничего, что помешало бы вам создать какой-либо базовый класс страницы или другой код в двух папках, которые могут определять, к какой странице входа нужно перейти. Или, я думаю, что событие Application_BeginRequest срабатывает перед запуском модуля FormsAuthentication, поэтому вы можете проверять запросы до того, как они будут перенаправлены с помощью FormsAuthentication. В любом случае, вы были бы вынуждены разрешать анонимным пользователям Folder1 и Folder2, что не идеально.

+0

Это похоже на то, как это сделать. – mamu

1

Вам необходимо использовать элемент <location> в вашем web.config. Вы можете использовать тег <location>, чтобы применить настройки авторизации к отдельному файлу или каталогу.

<location path="/root"> 
    <system.web> 
     <authentication mode="Forms" > 
     <forms name="LoginForm" defaultUrl="default.aspx" 
     loginUrl="/root/login.aspx" protection="Encryption" 
     timeout="30" path="/"/> 
     </authentication> 
    <authorization> 
     <allow users="?" /> 
    </authorization> 
    </system.web> 
</location> 
<location path="/root/admin"> 
    <system.web> 
    <authentication mode="Forms" > 
     <forms name="formName" defaultUrl="login.aspx" 
     loginUrl="/root/admin/login.aspx" protection="Encryption" 
     timeout="30" path="/"/> 
    </authentication> 
    <authorization> 
     <allow users="?" /> 
    </authorization> 
    </system.web> 
</location> 

MSDN

Для централизованного управления, настройки могут быть применены в Machine.config файле . Параметры в файле файла Machine.config определяют политику в масштабе всего компьютера, а также могут быть , используемые для применения конфигурации приложения с использованием <location> элементов. Разработчики могут предоставить файлы конфигурации приложения до переопределить аспекты политики машины. Для веб-приложений ASP.NET файлWeb.config находится в виртуальном корневом каталоге приложения и необязательно в подкаталогах под виртуальным корнем.

Если вам нужно 1 место для входа и различные уровни доступа, вы можете использовать roles.

<location path="/root"> 
    <system.web> 
    <authorization> 
     <allow roles="admin,root" />/*admin, root is allowed */ 
     <deny users="*" /> 
    </authorization> 
    <system.web> 
</location> 

<location path="/root/admin"> 
    <system.web> 
    <authorization> 
     <allow roles="admin" />/*admin is allowed */ 
     <deny users="*" /> 
    </authorization> 
    <system.web> 
</location> 

Пользователи могут принадлежать к более чем одной роли. Например, если ваш сайт является дискуссионным форумом , некоторые пользователи могут быть в роли как членов, так и Модераторы. Вы можете определить каждую роль , чтобы иметь разные права на сайте , а пользователь, который находится в обеих ролях, имел бы оба набора из привилегий.

Вы можете получить доступ все эти элементы на уровне кода, если вы хотите манипулировать роли/аутентификации программным

Page.User.Identity.Name 
Page.User.Identity.IsAuthenticated 
Page.User.Identity.AuthenticationType 
Page.User.IsInRole("string"); 

Дополнительные ссылки

Using 2 Membership Providers in asp.net

4 Guys From Rolla Tutorial

The ASP.NET web.config File Demystified

+0

Уже пробовали это разрешение разрешить использование магии, поэтому не может быть установлено для местоположения – mamu

Смежные вопросы