2017-05-05 2 views
0

아이덴티티가있는 .Net MVC5를 사용하고 있으며 일반적으로 dev에 처음이에요.MVC5에서 사용자가 로그 아웃 할 때 강제로 로그 아웃하는 방법

어떻게 잠금 페이지를 표시하고 잠금 상태에 따라 사용자가 로그 아웃하도록 할 수 있습니까?

테스트 목적으로 "Admin"역할과 "RegisteredUser"역할의 두 사용자를 만들었습니다.

특정 "RegisteredUser"에 대한 테스트를 위해 DateTime.MaxValue에 대한 잠금을 설정/해제하고 잠금을 설정하는 Ajax 작업을했습니다. 그것은 관리자를위한 몇 가지보기에 엮어 져 있습니다.

로그인 한 상태에서 "RegisteredUser"가 "Admin"에 의해 잠긴 경우 "RegisteredUser"가 다음 요청시 또는 최소 60 분 후에 잠금 페이지를 표시하려고합니다.

이제 Global.asax에서 AuthorizationFilter 및 ActionFilter 또는 일부 이벤트 처리기에 대해 들어 봤습니다. 그러나 이미 사용자를 비활성화하는 메커니즘이 있으며 대상 사용자 역할에 즉시 반영됩니다.

즉각적인 시행으로 사용자를 잠 그거나 해제하는이 문제를 가장 잘 구현하는 방법.

답변

0

OnActionExecuting을 구현하는 기본 컨트롤러를 사용합니다. 이 시점에서 사용자가 잠금 화면에 redirected해야하는지 확인할 수 있습니다.

+0

흠 ....이 방법은 틀림 없지만 데이터베이스를 계속 확인하고 싶지 않았기 때문에 다른 솔루션을 사용했습니다. – Dino

0

사용자를 잠그는 동안 인증 쿠키가 무효화되는 SecurityStamp도 변경되었습니다. Startup.Auth에서 찾을 수있는 통합 아이덴티티 2.0 메커니즘은 쿠키 무결성을 매회 확인 (기본값 : 30 분)하고 유효하지 않은 경우 사용자를 로그 아웃합니다 (예 : 다른 SecurityStamp로 쿠키가 있음). 수표에 대한 시간 지연은 변경 될 수 있지만 제 프로젝트에 대한 권리가 있다고 생각합니다.

이 코드 부분은 일부 사용자 쿠키를 무효화하고 매일 검사를 예약하여 실제로 실행하면됩니다.

var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
var user = userManager.FindByName(username); 

userManager.SetLockoutEnabled(user.Id, true); 
userManager.SetLockoutEndDate(user.Id, DateTime.MaxValue); 
user.SecurityStamp = Guid.NewGuid().ToString("D"); 
userManager.UpdateSecurityStamp(user.Id); 

쿠키 유효성 확인 및/또는 재생성을 담당하는 부분은 이미 있지만 실수가없는 경우 Identity 2.0에서만 제공됩니다. 신용이 그 사람에게 간다, 그래서 내가 다른 글에서 유래 여기에 모든이를 발견

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/Account/Login"), 
    Provider = new CookieAuthenticationProvider 
    { 
     // Enables the application to validate the security stamp when the user logs in. 
     // This is a security feature which is used when you change a password or add an external login to your account. 
     OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
      validateInterval: TimeSpan.FromMinutes(30), 
      regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
    } 
});  

:이 구성이 Startup.Auth.cs 파일에이 같이 보입니다입니다.

케빈 라파이 (Kevin Raffay)의 답변이 확실하게 작동하기 때문에 나는이 문제에 익숙하지 않아 답변으로 표시 할 것이므로 어떤 접근 방식이 더 좋을지 잘 모르겠습니다.

관련 문제