세션 쿠키를 수동으로 deserialize하여 사용자를 추출해야합니다. 환경은 http 서버 컨텍스트에 있지 않지만 레일입니다. 따라서 자동으로 deserialise 할 장치가 필요하지 않습니다. Warden :: SessionSerializer가 있습니다. 실제로 사용법을 알지 못했습니다. 어떤 사람들은 수동으로 쿠키를 역 직렬화하는 것은 이제까지 할 수있는 상황이 있는지 의심 될 수 있기 때문에장치/감시 세션 쿠키에서 사용자 가져 오기
def decrypt_cookie(cookie)
cookie = CGI.unescape(cookie)
config = Rails.application.config
encrypted_cookie_salt = config.action_dispatch.encrypted_cookie_salt
encrypted_signed_cookie_salt = config.action_dispatch.encrypted_signed_cookie_salt
key_generator = ActiveSupport::KeyGenerator.new(config.secret_key_base, iterations: 1000)
secret = key_generator.generate_key(encrypted_cookie_salt)
sign_secret = key_generator.generate_key(encrypted_signed_cookie_salt)
encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret)
encryptor.decrypt_and_verify(cookie)
end
: 내가 고안를 사용하지되기 전에
은 그래서 레일 세션 쿠키를 직렬화하기 위해이 방법을 사용 적절한 : 클라이언트 (브라우저)는 HTTP를 통해 인증되며 세션은 물론 쿠키에 저장됩니다. Rails는 특정 권한 동작에 응답하는 websocket 서버도 실행합니다 (레일 러너). 이 경우 사용자를 (다시) 인증해야합니다. 누군가 다른 방식 (더 나은)을 보게되면 그것을 읽게되어 기쁩니다. :)
레일 스크립트로 스크립트를 시작하기 때문에 (일반 환경이로드되므로) 컨트롤러 내부에 있지 않으므로 궁극적으로 나를 비 직렬화하지 않았습니다. –
Warden 객체에 접근 할 수 있다면 (질문에 주어진 스크립트에서 할 수 있다고 가정하면)'# {warden_instance} .request.session'을 사용할 수 있습니다. – Bryce
요청도없고, http가 아닌 컨텍스트 –