从设计中获取数据

时间:2015-03-20 23:33:43

标签: ruby-on-rails devise warden

我正在远离铁轨。我将使用相同的域,因此我将获得rails使用的_session_id cookie,并且我可以使用旧的sessions表。我想使用它来提取数据({{ 1}})来自旧会话。我不知道如何在铁轨之外做这件事。

在控制器中当然有user_idcurrent_user,但我如何获取id,解密表中的数据,并自行提取内容(除了运行旧的rails应用程序)并在其上创建一条路径,返回我需要的信息并从我的新应用程序中点击它?)

1 个答案:

答案 0 :(得分:0)

我不完全确定这是最好的方式,但我很感兴趣,所以走下了兔子洞。这适用于我的4.1.10应用程序,其中会话存储在cookie中。您需要查看action pack的EncryptedCookieJar类和活动支持的CachingKeyGenerator和MessageEncryptor类以获取详细信息。

显然你需要更换两个开始“THE VALUE ...”的字符串。

key_generator = ActiveSupport::KeyGenerator.new('THE VALUE OF SECRET_KEY_BASE FROM config/secrets.yml', iterations: 1000)
caching_key_generator = ActiveSupport::CachingKeyGenerator.new(key_generator)
caching_key_generator.generate_key('encrypted cookie')
caching_key_generator.generate_key('signed encrypted cookie')
secret = caching_key_generator.generate_key('encrypted cookie')
sign_secret = caching_key_generator.generate_key('signed encrypted cookie')
encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret, serializer: ActionDispatch::Cookies::NullSerializer)
session_value = CGI::unescape('THE VALUE OF THE SESSION COOKIE')
serialized_result = encryptor.decrypt_and_verify(session_value)
result = Marshal.load(serialized_result)

对我来说,result是一个哈希,它看起来完全是Rails中的会话哈希。

如果它不适合您,您可能正在使用其他序列化程序,因此需要将Marshal.load替换为您需要的任何内容。只需查看serialized_result并查看。

相关问题