Продолжает выполнять MVC-контроллер после FormsAuthentication.SignOut () - PullRequest
0 голосов
/ 16 августа 2011

Сохраняю всю сессию в базе данных.Давайте представим, что этот сеанс был потерян в базе данных, а не в файлах cookie.

В OnAuthorization (AuthorizationContext filterContext) я получаю объект пользователя из базы данных по идентификатору сеанса.

if (HttpContext.User.Identity.IsAuthenticated)
{
    //Gets user data from DB.
    var user = userRepos.GetUser(HttpContext.User.Identity.Name); 

        if (user != null)
        {
            CurrentUser = user;
            Thread.CurrentPrincipal = HttpContext.User = new DibPrincipal(user);
            return;
        }
        else
        {
            FormsAuthentication.SignOut();
            Session.Abandon();
            Response.Redirect(FormsAuthentication.LoginUrl, true);
        }
    }
}

Представьте себеэтот пользователь вызвал контроллер GetDocuments, но он был перенаправлен в FormsAuthentication.LoginUrl.Это работает, пользователь перенаправлен, но я получаю исключение, которое показывает ошибку в контроллере GetDocument, потому что CurrentUser не существует.Так .net пытается вызвать GetDocuments даже после перенаправления.

Как избежать этой ошибки?

Спасибо!:)

1 Ответ

1 голос
/ 16 августа 2011

Вы не должны перенаправлять из функции OnAuthorization, а должны установить параметр Result из filterContext следующим образом:

filterContext.Result == new RedirectToRouteResult(new RouteValueDictionary {
{
    "controller",
    "Utilisateurs"
},
{
    "action",
    "Connexion"
},
{
    "ReturnUrl",
    filterContext.HttpContext.Request.RawUrl
}
});
...