我觉得通过阅读文档应该很明显这样做,但也许有人可以为我节省一些时间。我们正在使用 Ruby 的 CookieStore,并且我们希望与属于我们网站一部分的另一台服务器共享 cookie,该服务器使用 WCF。我们已经对 cookie 进行了 b64 解码,并且能够验证签名(通过共享秘密令牌),所有这些都很棒……当然,会话对象被编组为 Ruby 对象,它是不清楚什么是最好的方法。我们可以让 WCF 应用程序调用 Ruby 并让它解组对象并将其写为 JSON,但这似乎会给 WCF 服务器增加不必要的复杂层。
我真正想做的可能是 CookieStore 的子类,因此它不仅仅是对会话对象进行 b64 编码,而是将对象写入 JSON,然后将其写入 b64。(当然,在回来的路上做相反的事情)这样,会话令牌是完全可移植的,我不必担心 Ruby 版本不匹配等。但我很难弄清楚在哪里做. 我认为如果我提取 cookie_store.rb 的源代码会很明显,但事实并非如此(至少对我来说不是)。有人想指出我正确的方向吗?
(预料到一个相关的反对意见:为什么我们有两个独立的服务器需要如此密切地协调以共享会话 cookie?简短的回答:截止日期。)
更新:所以通过阅读代码,我发现当MessageVerifier
类被初始化时,它会查看是否有选项:serializer
,如果没有,则Marshal
默认使用。已经有一个名为的类JSON
履行了相同的合同,所以如果我能把它传递进去,我会很成功。
不幸的是,非常特别的initialize
函数只获取了作为选项传递给的选项。我没有看到一个简单的方法来解决这个问题......如果我可以让它将该选项传递给调用,那么实现我想要的就像添加到我的 session_store.rb 一样简单。CookieStore
:digest
MessageVerifier
:serializer
verifier_for
:serializer => JSON
更新 2:一位同事发现了这个,这似乎正是我想要的。不过,我还没有让它工作……得到一个(bah-dump)堆栈溢出。如果我发现任何值得注意的内容,将再次更新,但我认为该链接解决了我的问题。