0
我將所有會話保存在數據庫中。讓我們想象這個會話在數據庫中丟失了,而不是在cookies中。在FormsAuthentication.SignOut()後繼續執行MVC控制器
在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。
如何避免此錯誤?
謝謝! :)
它工作得很好!謝謝。但是爲什麼使用OnAuthorization的重定向是不對的。這兩種方法有什麼不同? – podeig
因爲你不應該直接管理自己的重定向,而是向mvc表明你想重定向,因此允許它正確地管理重定向。你的「Response.Redirect」有點像在本身停止進程。 – billy