我将所有会话保存在数据库中。让我们想象一下,这个会话在数据库中丢失了,而不是在cookie中丢失。
在OnAuthorization(AuthorizationContext filterContext)中,我根据会话ID从数据库中检索用户对象。
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。
如何避免此错误?
谢谢! :)
答案 0 :(得分:1)
您不应该从OnAuthorization函数重定向,而应该从filterContext中设置Result参数:
filterContext.Result == new RedirectToRouteResult(new RouteValueDictionary {
{
"controller",
"Utilisateurs"
},
{
"action",
"Connexion"
},
{
"ReturnUrl",
filterContext.HttpContext.Request.RawUrl
}
});