Страница входа для конкретной области - PullRequest
3 голосов
/ 14 апреля 2011

В моем приложении MVC 3 .net у меня есть две области, одна называется Администратор, а другая - Студент. Я использую встроенную систему членства для аутентификации пользователей, и она объединяет две области. Проблема заключается в том, что я хочу использовать страницы входа, специфичные для каждой области, поскольку эти две области довольно разнообразны по дизайну (Student ориентирован на мобильные устройства). Насколько я знаю, я могу указать только одну страницу входа для приложения в Web.config, например:

<authentication mode="Forms">
   <forms loginUrl="~/Admin/Account/LogOn" timeout="2880" />
</authentication>`

В таком случае, как мне реализовать несколько страниц входа в систему для одной и той же системы членства?

Ответы [ 2 ]

6 голосов
/ 14 апреля 2011

Для приложения ASP.NET можно указать только 1 URL-адрес входа в систему, поэтому вам потребуется выполнить следующие действия:

В каждом Araa есть контроллер входа в систему, а также главный контроллер входа вкорень приложения.

В Web.Config убедитесь, что у вас есть:

<configuration>
  <location path="/Admin/Account/LogOn">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>
  <location path="/Student/Account/LogOn">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>

В вашем Web.Config настройте аутентификацию форм для использования контроллера входа в корневом приложении.:

<forms loginUrl="~/LogOn" timeout="2880" />

Затем в корневом контроллере входа выполните действие по умолчанию:

//
// GET: /LogOn
public ActionResult Index(string returnUrl)
{
    var area = returnUrl.TrimStart('/').Split('/').FirstOrDefault();

    if (!string.IsNullOrEmpty(area))
        return RedirectToAction("LogOn", "Account", new { area });

    // TODO: Handle what happens if no area was accessed.
}
4 голосов
/ 14 апреля 2011

Вы должны прочитать этот технический документ.Решение вашей проблемы описано там.

...