2017-04-23 4 views
0

컨트롤러 메서드 대신 작업을 수행하기 위해 javascript를 사용하고 있기 때문에 해당 동작이 렌더링되기 전에 사용자가 시간 초과되었는지 확인해야합니다. 이렇게하려면 내가 추가하고 다음과 같이 내 application_controller.rb에서 쿠키를 삭제 시도 : 사용자가 기한 내에 만료되었는지 확인

Warden::Manager.after_set_user do |user,auth,opts| 
    auth.cookies[:signed_in] = 1 
end 

Warden::Manager.before_logout do |user,auth,opts| 
    auth.cookies.delete :signed_in 
end 

내 자바 스크립트 파일에

: 그러나

myCookie = getCookie("signed_in"); 
if (myCookie == null) 
{ 
    //redirect to sign in page 
} else { 
    //perform my action 
} 

function getCookie(name) { 
    var dc = document.cookie; 
    var prefix = name + "="; 
    var begin = dc.indexOf("; " + prefix); 
    if (begin == -1) { 
    begin = dc.indexOf(prefix); 
    if (begin != 0) return null; 
    } 
    else 
    { 
    begin += 2; 
    var end = document.cookie.indexOf(";", begin); 
    if (end == -1) { 
    end = dc.length; 
    } 
    } 
    return decodeURI(dc.substring(begin + prefix.length, end)); 
} 

,이 세션 제한 시간에 작동하지 않는 것 , 로그 아웃시에만. 나는 이것을 달성하기위한 몇 가지 해키 방법을 보았지만 Devise 또는 Warden에서 사용자가 시간 초과되었거나 사용자가 있었는지 조치를 취하는 지 테스트하는 방법을 사용하거나 재정의하는 것으로부터 직접적으로 아무것도 찾을 수없는 것 같습니다. 시간 초과. 나는 Rails 5와 Devise 4.2.1을 사용 중이다.

답변

0

타임 아웃을 설정하면 서버 측이므로 사용자가 시간 초과가 발생했는지 확인하기 위해 서버에 조치를 요청해야합니다.이 시간이 경과하면 클라이언트에 변경 사항이 없으므로, 알아야 할 유일한 방법은 세션 시간 제한이 user.timedout?(Time.now.utc)인지 확인하기 위해 서버에 아약스 요청을하거나 (컨트롤러에서) 작업 요청에 대한 유효성 검사를 직접 수행하는 경우 사용자가 항상 작업을 실행하려고 시도하지만 서버, 당신은 사용자가 타임 아웃을 가지고 있는지 확인한 다음, 그렇게하지 못하게하고 로그인 페이지로 리디렉션합니다.