ドキュメントを読んでこれを行うのは明らかだと思いますが、誰かが時間を節約できるかもしれません。Ruby の CookieStore を使用しており、WCF を使用している Web サイトの一部である別のサーバーと Cookie を共有したいと考えています。すでに Cookie を b64 デコードしており、(秘密トークンを共有することによって) 署名を検証することができます。これはすべて素晴らしいことですが、もちろん、セッション オブジェクトは Ruby オブジェクトとしてマーシャリングされています。続行する最善の方法が明確ではありません。おそらく、WCF アプリケーションで Ruby を呼び出し、オブジェクトをアンマーシャリングして JSON として書き出すこともできますが、それは WCF サーバーに不必要な複雑さの層を追加するように思われます。
私が実際にやりたいのは、CookieStore をサブクラス化して、セッション オブジェクトを b64 でエンコードする代わりに、オブジェクトを JSON に書き込み、次に b64 に書き込むことです。(そしてもちろん、戻る途中で逆を行います) そうすれば、セッション トークンは完全に移植可能であり、Ruby のバージョンの不一致などを心配する必要はありません。 . cookie_store.rb のソースを引っ張れば明らかだと思いましたが、そうではありません (少なくとも私にはそうではありません)。誰かが私を正しい方向に向けたいですか?
(関連する反論を予想してください:セッション Cookie を共有するほど密接に調整する必要がある2 つの別個のサーバーがあるのはなぜですか? 簡単な答え: 締め切り。)
更新:コードを読んだところ、MessageVerifier
クラスが初期化されると、 のオプションがあるかどうかが確認され:serializer
Marshal
、そうでない場合はデフォルトで使用されることがわかりました。同じコントラクトを満たすというクラスが既にあるJSON
ので、それを渡すことができれば、私はゴールデンです。
残念ながら、 のinitialize
関数は、 へのオプションとして渡すオプションCookieStore
を非常に具体的にしか取得し:digest
MessageVerifier
ません。これを回避する簡単な方法がわかりません...その:serializer
オプションをverifier_for
呼び出しに渡すことができれば:serializer => JSON
、session_store.rbに追加するだけで、文字通り簡単に目的を達成できます。
更新 2 : 同僚がこれを見つけました。これはまさに私が求めているものと思われます。ただし、まだ機能していません...(bah-dump)スタックオーバーフローが発生しています。注目に値するものを見つけたらもう一度更新しますが、リンクが私の問題を解決すると思います.