2014-11-14 15 views
0

에서 조치를 보내Authlogic 방법 때 logout_on_timout 또는 내가 세션이 파괴 로그인 시간을 절약 세션

UserSessionsController (컨트롤러)

def destroy 
     connectime = (Time.now - current_user.current_login_at).to_i 
     current_user.logtime(connectime) 
     current_user_session.destroy 
     redirect_to new_user_session_url 
    end 

사용자 (모델)

def logtime(connectime) 
     self.log_duration ||= 0 
     self.log_duration += connectime 
     self.save 
    end 

사용자가 로그 아웃해도 괜찮습니까? 그러나에는 작동하지 않습니다.

이 연결 시간을 저장하기 위해 시간 초과 후 사용자가 로그 아웃 한 경우 어디에서 메소드를 호출 할 수 있습니까?

[편집] 내가 찾고 있어요 타 방법은 persistence_token이 after_persisting로 변경 될 때 몇 가지 방법을 보내는 것입니다,하지만 모델에 CURRENT_USER에 액세스 할 수 없습니다.

문제는 사용자가 서버에서 어떤 조치를 취할 때 컨트롤러 (세션 또는 사용자)로부터 지시를 보낼 적절한 장소를 찾는 것입니다.

답변

0

나는 솔루션 통을 발견했다. 내가 열 log_total_duration 사용자가 서버에 상호 작용을 추가

나는 여러 호출이 서버를 늦출 것을 두려워하지만, 더 나은 만드는 방법을 알고하지 않습니다 ... 그것은 시간을 저장하기 위해이 before_filter를 호출 사용자가 로그 됨 (log_duration)

def set_time 
    if current_user 
     @user = User.where(:id => current_user).first 
     @user.log_duration = (@user.last_request_at - @user.current_login_at).to_i 
     @user.save 
    end 
    end 

언제 사용자가 로그인했는지 UserSessionController의 작성 메소드에서 사용합니다. 은 사용자 모델에 log_duration_total

def create 
     @user_session = UserSession.new(params[:user_session])  
     if @user_session.save   
     current_user = UserSession.find.user 
     current_user.logtime 

에 log_duration를 추가

def logtime 
     self.log_duration_total ||= 0 
     self.log_duration_total += log_duration 
     self.save 
    end