재우니의 블로그

 

 

asp.net identity 는 cookie 방식으로 운영됩니다. 그래서 iis 재시작해도 끊어지지 않고 계속 인증이 해지되지 않고 유지 되어 사용할 수 있습니다. 만약에 재시작이나 패치 후 강제로 끊어지게 할려면 강제 로그아웃을 해서 쿠키를 삭제해야 하는데요. 이는 session 을 활용하여 간단하게 아래와 같이 filter 를 만들어 두어서 global 전역에 반영해 두면 됩니다.

 

아래 코드엔 없지만, 인증 ok~ 되면 Session["Username"] = "값"; 을 넣어 두시기 바랍니다.

 

public class SessionHandler : ActionFilterAttribute
{
    private ApplicationUserManager _userManager;
    private IAuthenticationManager AuthenticationManager
    {
        get
        {
            return HttpContext.Current.GetOwinContext().Authentication;
        }
    }
    public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
        private set
        {
            _userManager = value;
        }
    }
    public IIdentity UserIdentity
    {
        get { return System.Web.HttpContext.Current.User.Identity; }
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        if (!string.IsNullOrWhiteSpace(UserIdentity.GetUserId()))
        {
            if (System.Web.HttpContext.Current.Session["Username"] == null)
            {
                AuthenticationManager.SignOut();
                filterContext.Result = new RedirectToRouteResult(
                              new RouteValueDictionary
                              {
                                   { "action", "Index" },
                                   { "controller", "Home" }
                              });
            }
        }
    }
}

 

Global.asax 파일에서 다음 코드를 추가 합니다.

 

GlobalFilters.Filters.Add(new SessionHandler());

 

참고 사이트

 

www.javaer101.com/en/article/15454064.html

 

user,new,public

Jeeva Jsb I have implemented asp.net mvc with asp

www.javaer101.com