Request.IsAuthenticated по-прежнему имеет значение true после вызова FormsAuthentication.SignOut () и перенаправления обратно на страницу - PullRequest
2 голосов
/ 19 марта 2012

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

Я установил контрольные точки для каждого вызова 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".

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

1 Ответ

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

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

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