ASP.NET MVC проблема с настройкой раздела проверки подлинности форм - PullRequest
21 голосов
/ 03 ноября 2010

У меня есть приложение ASP.NET MVC 3 Beta, работающее на IIS. В моем web.config я определил следующий раздел, отвечающий за аутентификацию форм:

<authentication mode="Forms">
    <forms 
        loginUrl="~/Account/LogOn" 
        name=".VNK" 
        protection="All" 
        timeout="43200" 
        cookieless="UseCookies" />
</authentication>

Определенный адрес для входа: ~/Account/LogOn.

Когда я пытаюсь получить URL для входа в систему, используя:

FormsAuthentication.Initialize();
string loginUrl = FormsAuthentication.LoginUrl; 

Я получаю: /VNK/site/Account/Login

Почему я получаю адрес, отличный от адреса, определенного в web.config?

ОБНОВЛЕНИЕ : Префикс "/ VNK / site /" не проблема здесь. Проблема в том, что свойство LoginUrl класса FormsAuthentication не отражает значение из web.config. Это означает, что если я изменю значение атрибута loginUrl в web.config с "~ / Account / LogOn" на, например, «~ / foobar», FormsAuthentication.LoginUrl по-прежнему имеет значение «/ VNK / site / Account / Login». Почему?

Ответы [ 8 ]

27 голосов
/ 04 ноября 2010

Я думаю, что есть ошибка в ASP.NET MVC 3 Beta. Эта проблема не появляется в предыдущих выпусках ASP.NET MVC.

Если кто-то захочет воспроизвести эту ошибку, он должен выполнить следующее:

1 . Загрузите mvc framevork .

2 . Создание нового Веб-приложение ASP.NET MVC 3

3 .Applay Authorize атрибут About действие в HomeController

[Authorize]
public ActionResult About()
{
   return View();
}  

4 . Запустите приложение и вызовите О действии , нажав на вкладку О . Вы получите ошибку сервера, потому что приложение пытается перенаправить Вас на такой URL:

http://localhost:[port_num]/Account/Login?ReturnUrl=%2fHome%2fAbout

Там явно нет Логин просмотр. Есть LogOn просмотр. URL-адрес для входа в систему определяется в нетронутом файле web.config:

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

Но приложение не отражает этого. Кто-нибудь знает, что происходит?

UPDATE:

Я был прав, есть ошибка в MVC 3 Beta . Из известных проблем :

"Существует известная проблема, из-за которой проверка подлинности с помощью форм всегда перенаправляет неаутентифицированных пользователей в / Account / Login, игнорируя параметр проверки подлинности с помощью форм, используемый в Web.config. Временное решение: добавить следующий параметр приложения."

<add key="autoFormsAuthentication" value="false" />

ОБНОВЛЕНИЕ 2:

Александр Прокофьев заметил, что ASP.NET 3 RTM ищет другую настройку. Поэтому вам нужна эта строка:

<add key="loginUrl" value="~/LogOn" />

1 голос
/ 23 января 2013

Таким образом, простым решением было удалить WebMatrix. *. Dll из папки Bin в веб-проекте.Я сделал это для моего проекта asp.net, так как он перенаправлял мой логин в URL-адрес в стиле mvc.

1 голос
/ 31 января 2012

Если у вас есть доступ к IIS, добавьте новое приложение и включите ASP.NET «интегрированную конвейеризацию» в разделе пула приложений, дважды щелкнув его.

Если ваш хостинг-провайдер не предоставляет вам доступ к IIS, затем войдите в панель управления.

  • Перейти на веб-сайты, на вкладке управления - включить ASP.NET интегрированный футеровка трубы.
  • Установите ваше приложение в качестве виртуального каталога (У меня это сработало)
0 голосов
/ 18 марта 2016

Я удалил следующее из своего web.config

<remove name="FormsAuthentication" />

и тогда все, казалось, работало. Этот текст был добавлен по умолчанию при создании проекта.

0 голосов
/ 14 октября 2014

Поместите в appSettings следующее:

<add key="loginUrl" value="~/Account/LogOn" />

Вы можете очистить loginUrl из конфигурации проверки подлинности формы.

0 голосов
/ 20 марта 2014

Обновленный ответ для MVC 4, в значительной степени заимствованный с этой страницы и Запрос перенаправления в / Account / Login? ReturnUrl =% 2f, так как MVC 3 установлен на сервере

<appSettings>
   ...
   <add key="PreserveLoginUrl" value="true" />
</appSettings>

...

<authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="43200" /> <!--43,200 in minutes - 30 days-->
</authentication>
0 голосов
/ 03 ноября 2010

Я думаю, что серверу трудно решить, что ~ означает в этом случае, попробуйте дать более прямой URL-адрес для страницы входа, такой как /Account/LogOn.

Возможно, вы найдете здесь что-то полезное http://msdn.microsoft.com/en-us/library/xdt4thhy.aspx

0 голосов
/ 03 ноября 2010

Тильда (~) означает «корень моего веб-сайта», поэтому вам не нужно постоянно использовать .. или \ для перехода вверх и вниз по структуре веб-сайта.Однако с точки зрения IIS ваше веб-приложение может иметь дополнительный уровень структуры каталогов, который отражается при программном запросе LoginUrl.Я не уверен, почему вы хотите получить LoginUrl, при нормальном состоянии IIS автоматически перенаправляет пользователя на LoginUrl каждый раз, когда он пытается получить доступ к странице, для которой он не аутентифицирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...