특정 사용자를 로그 아웃하려는 일부 관리 모듈의 일부인 것으로 가정합니다.
그러나 이것은 쉽게 해결할 수있는 이 아니며입니다. 사용자가 로그인했는지 여부는 세션에 저장됩니다. 따라서 다른 사용자를 로그 아웃하려면 해당 세션에 대한 액세스 권한이 있어야합니다.
참고 : afaik의 sign_out
메서드는 현재 세션에서만 작동하거나 워든 (관리자 만 잘 모름)이 현재 서버가 만난 모든 세션까지 확장 될 수 있습니다. 그러나 : 승객이나 레일 서버 클러스터 (꽤 일반적입니다)를 사용하는 경우 afaik이 작동하지 않습니다. 나는 약간의 설명과 함께 다르게 듣고 싶을 것이다 :) sign_out
은 주어진 매개 변수를 사용하여 현재 세션에서 (afaik)에서 로그 아웃 할 범위를 결정한다.
그래서 우리가 일반적으로 한 것은 모든 사용자를 로그 아웃하기위한 일종의 비상 버튼을 추가하는 것입니다. 모든 세션을 파괴합니다. 이것은 데이터베이스 또는 문서 저장소로 백업 된 세션 저장소를 사용하는 경우에만 가능합니다.
다른 방법으로 모든 세션을 열고 사용자에게 맞는 올바른 세션을 찾은 다음 해당 세션을 삭제할 수 있습니다. 액티브에 저장된의 특정 세션에서 데이터를 읽을 수
는 다음을 작성할 수 있습니다
@session = ActiveRecord::Base.connection.select_all("SELECT * FROM sessions WHERE session_id = '#{sess_id}'")
Marshal.load(ActiveSupport::Base64.decode64(@session.data))
이 대안 적 방법 :
- 사용
Timeoutable
모듈, 그리고에 대한 시간 제한을 강제로 사용자?
Rememberable
을 사용하는 경우 @user.forget_me
을 할 수는 있지만 실제로 이것이 현재 세션에 영향을 미치는지 확신 할 수 없습니까?
테스트 또는 개발/프로덕션 환경에서 사용자를 서명하는 것에 대해 이야기하고 있습니까? –
목적은 무엇입니까? '@ user' 세션이 설정되어 있는지 확인하십시오 – Nithin
['devise rememberable module'] (https://github.com/plataformatec/devise/blob/master/lib/devise/models/rememberable.rb)를보십시오. –