Я получаю сообщение об ошибке «Страница не перенаправляется должным образом», когда мое действие выдает пользователю и перенаправляет обратно к себе. После возвращения перенаправления действие вызывается снова, но 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".
Спасибо за помощь!
Я хотел бы проверить текущий Пользователь.Идентичность.Имя - это его окна имя учетной записи случайно? Это тот же самый пользователь, который просто закончил сессию? Проверьте, чтобы заголовок set-cookie сворачивался, чтобы удалить файлы cookie auth. Загрузите скрипач и посмотрите на заголовок на формеauth.SignOut(); (ну в конце запроса) –
Я попробую это, когда смогу. К сожалению, я не понял, как последовательно воспроизводить это. Я подозреваю, что это проблема с FireFox, поскольку она отлично работает в Chrome. Кажется, что FF занимает некоторое время, чтобы на самом деле закончить файл cookie, потому что после того, как я написал вопрос и вернулся к FF и перезагрузил страницу, он сработал. –