すべてのセッションをデータベースに保存します。このセッションがクッキーではなくデータベースで失われたと想像してみましょう。FormsAuthentication.SignOut()の後にMVC-controllerを実行し続ける
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は存在しないため例外が発生します。だからリダイレクトした後でもGetDocumentsを呼び出そうとしています。
このエラーを回避する方法を教えてください。
ありがとうございます! :)
!ありがとうございました。しかし、なぜOnAuthorizationからのリダイレクトを使用するのは適切ではありません。これら2つのアプローチの違いは何ですか? – podeig
リダイレクトを自分で直接管理するのではなく、リダイレクトしたいことをmvcに指示して、リダイレクトを適切に管理できるようにする必要があるからです。あなたの "Response.Redirect"は、それ自体の途中でプロセスを停止するようなものです。 – billy