私のMVCプロジェクトには次のログイン方法があります
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (_authenticationRepository.Login(model.UserName, model.Password))
{
var authenticationTicket = new FormsAuthenticationTicket(1, model.UserName, DateTime.Now,
DateTime.Now.AddMinutes(20),
model.RememberMe, "", "/");
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(authenticationTicket));
Response.Cookies.Add(cookie);
UserContext.CreateUserContext();
return RedirectToLocal(returnUrl);
}
}
UserContext.cs これは、ユーザー/権限をセッションに保存します。
public static void CreateUserContext()
{
BuildUserContext(HttpContext.Current.User);
}
private static void BuildUserContext(IPrincipal principalUser)
{
if (!principalUser.Identity.IsAuthenticated) return;
var user = _userAccountsRepository.GetUserByUserName(principalUser.Identity.Name);
if (user == null) return;
var userContext = new UserContext { IsAuthenticated = true };
var siteUser = Mapper.Map(user);
userContext.SiteUser = siteUser;
HttpContext.Current.Session["UserContext"] = userContext;
}
IsAuthenticated はリダイレクト後にのみ true になることを認識しています。私の login() メソッド内で、principalUser.Identity.IsAuthenticated が true を返すようにすることは可能ですか?
または、ログイン方法ではない場合、ユーザーコンテキストを作成するのに適した場所は他にありますか?
私が達成しようとしているのは次のとおりです。
- ユーザーのログイン
- ログインが成功した場合は、ユーザーが特定のアクションにアクセスできるかどうかを確認するたびに再クエリする必要がないように、db にロール/権限をクエリしてセッションに保存します。