2016-12-13 1 views
0

사용자가 암호를 업데이트하면 전화 나 다른 브라우저와 같은 모든 세션을 무효화하고 현재 장치에 대한 단일 세션을 새로주고 싶습니다. 그냥 전화하면 sign_out @user; sign_in @user, 작동하는 것 같습니다.암호 변경 후 모든 사용자 세션을 종료합니다.

그러나 Devise # sign_out 및 Warden # logout 메소드의 실제 구현을 제외하고는이 주장을 뒷받침하는 문서를 찾을 수 없습니다.

문서화 된 솔루션이 더 깨끗합니까?

감사합니다.

답변

0

레일에서 새 세션을 만들려면 reset_session을 사용하십시오.

In Rails 세션에서는 서버 및 클라이언트가 쿠키로 저장하는 세션 식별자를 사용합니다. reset_session은 서버에서 현재 사용자의 식별자를 제거하고 새 식별자를 발급합니다. 기존의 세션 저장소 쿠키는 서버에 의해 받아 들여지지 않고 session으로 deserialize되지 않습니다.

the Rails guide article on security은 세션이 레일스에서 ​​실제로 작동하는 방식에 대해 아주 잘 정리되어 있으므로 권장합니다.

+0

그러나 Devise/Warden은 실제로이 문제를 매우 잘 처리합니다. 워든은 세션 식별자를 취소하지 않습니다. 오히려 단지 세션에서 직렬화 된 사용자를 삭제합니다 (사용자 ID 또는 저장된 모든 소유권 주장). 이렇게하려면 사용자가 다시 로그인해야합니다. – max

+0

그러나 기본 CookieStore 세션 저장 메커니즘을 사용하는 경우 모든 장치에서 세션을 쉽게 취소 할 수 없습니다. 이것은 세션이 특정 장치가 보유한 세션 식별자에 연결되어 있고 저장소가 해당 장치에 있기 때문입니다. 따라서 어떤 세션 식별자가 사용자 레코드에 링크되어 있는지 알 수 없습니다./memcached 데이터베이스 저장소를 사용하는 경우 데이터베이스를 쿼리하고 세션을 제거 할 수 있습니다. – max

+0

답변 해 주셔서 감사합니다. 'reset_session'은 주어진 사용자의 다른 모든 세션을 만료합니까? –

관련 문제