2014-05-22 3 views
0

ASP.NET ID 2를 사용하여 사용자를 관리하고 UserManager를 통해 특정 사용자가 인증되거나 로그인되었는지 확인하는 기능이 있는지 알고 싶습니다. 현재. 이 말은 내 사이트 관리자가 주어진 사용자가 로그인했는지 여부를 확인하는 것을 의미합니다. User.Identity.IsAuthenticated는 현재 HTTP 요청에만 해당됩니다. 달리 구현하려면 어떻게해야합니까?ASP.NET ID 2를 사용하여 사용자가 인증되었는지 확인

+0

웹은 본질적으로 Stateless입니다. 그래서 사용자가 로그인하면 웹 사이트에 직접 물어볼 수있는 것이 아무것도 없습니다. 결국 로그인 한 다음 브라우저를 닫을 수 있습니다. 그래서 내가 로그인했는지 안 했니? 나는 FormAuthentication이 마지막 로그인 또는 업데이트 상태 날짜를보고 (현재 필드를 기억할 수 없음) 사용자 또는 사용자가 현재 로그인 한 경우 말하기 위해 시간대 (30 분)와 비교한다고 생각합니다. –

답변

2

아니요, 현재 로그인 한 사용자를 추적하는 기본 Identity 2.0에는 기능이 없으므로 직접 추가해야합니다. MVC가 작동하는 방식 때문에 (실제로 HTTP의 무국적 상태 때문에) 서버는 클라이언트가 로그인되어 있는지 여부에 대한 결정적인 아이디어를 결코 얻지 못합니다. "로그인"되는 가장 기본적인 수준에서

이 때부터로 정의 할 수 있습니다

  • 사용자가 인증하고, 인증 티켓은 브라우저
에 쿠키로 작성

중 다음 중 하나가 발생할 때까지 :

  • 사용자는 로그 아웃 링크를 클릭

  • 는 인증 티켓 쿠키가 만료되거나 티켓이 클라이언트 측에 존재하기 때문에

삭제되면, 서버는 사용자가 첫 번째 경우에 로그 아웃 정확히 알고있다. 두 번째 경우에는 클라이언트의 다음 HTTP 요청이있을 때만 알 수 있습니다. 백그라운드 AJAX 폴링이나 SignalR과 같은 다른 클라이언트 서버 통신을 사용하지 않는다면, 클라이언트가 그냥 대기 상태에 있거나 브라우저를 닫았거나 다른 페이지로 이동 한 경우 서버는 차이를 알 수 없습니다.

자신을 계속 추적하고 싶다면 IdentityUser 클래스를 확장하여 사용자의 마지막 로그인 또는 활동의 타임 스탬프를 추가해야합니다 (사용자가 요청할 때마다이 정보를 업데이트). 이를 현재 시간과 비교 한 다음 특정 시간 범위 내에서 활동이없는 사용자가 로그 아웃 된 것으로 간주할지 결정하십시오. 예를 들어, 지난 30 분 동안 서버에 접속하지 않은 사용자가 "로그 아웃"했다고 판단 할 수 있지만 실제로 컨트롤러 방법이 Account\Logout 인 경우를 제외하고는 절대 알 수 없습니다.

관련 문제