2

Я получаю сообщение об ошибке «Страница не перенаправляется должным образом», когда мое действие выдает пользователю и перенаправляет обратно к себе. После возвращения перенаправления действие вызывается снова, но Request.IsAuthenticated по-прежнему является истинным, а не false.Request.IsAuthenticated по-прежнему верен после вызова FormsAuthentication.SignOut() и перенаправления на страницу

Я поставил точки останова на каждом вызове FormsAuthentication.SetAuthCookie в моем коде, и ни один из них никогда не попадал (я хотел проверить, что не было кода, который бы повторно аутентифицировал пользователя).

public ActionResult MyAction() { 
    if (Request.IsAuthenticated) { 
     try { 
      // Check some stuff put into the session when the user 
      // is authenticated 
     } catch { 
      Session.Abandon(); 
      FormsAuthentication.SignOut(); 
      return Redirect("http://localhost/MyController/MyAction"); 
     } 
    } 
} 

Вполне возможно, что это вопрос FireFox, как я использую FireFox 11.0 и, кажется, работает в Chrome. Кто-нибудь знает, почему это происходит?

Я еще не выделил это для простого проекта. Я надеялся, что это что-то простое, что мне не хватает.

Следует также упомянуть, что у меня есть UrlRewriter, который контролирует входящие запросы и может перенаправить их на URL-адрес, который может иметь отдельный файл cookie-аутентификации с основного сайта. Это может быть проблема?

Ex.

// cookiePath: "/" 
http://localhost/MyApp/CustomPortal/index/CustomPage 

Изменения:

// cookiePath: "/CustomPortal" 
http://localhost/MyApp/SpecialRequestController/Render?appName=CustomPortal&pagePath=public/CustomPage 

Когда пользователь проходит проверку подлинности MyApp, то cookiePath является "/", но если пользователь выполняет проверку подлинности под переписан URL, то cookiePath является "/ CustomPortal".

Спасибо за помощь!

+2

Я хотел бы проверить текущий Пользователь.Идентичность.Имя - это его окна имя учетной записи случайно? Это тот же самый пользователь, который просто закончил сессию? Проверьте, чтобы заголовок set-cookie сворачивался, чтобы удалить файлы cookie auth. Загрузите скрипач и посмотрите на заголовок на формеauth.SignOut(); (ну в конце запроса) –

+0

Я попробую это, когда смогу. К сожалению, я не понял, как последовательно воспроизводить это. Я подозреваю, что это проблема с FireFox, поскольку она отлично работает в Chrome. Кажется, что FF занимает некоторое время, чтобы на самом деле закончить файл cookie, потому что после того, как я написал вопрос и вернулся к FF и перезагрузил страницу, он сработал. –

ответ

0

Вы определили имя формы в файле web.config, это может быть одна из причин

<authentication mode="Forms"> 
    <forms name="HCGAuth" timeout="60"></forms> 
</authentication> 
+0

Я этого не делал. Вместо этого я использую имя приложения как путь к файлу cookie при вызове SetAuthCookie. Есть ли причина, по которой это не должно работать? Как я уже сказал, он работает в Chrome и только случайно разбивается на FF. –