私はこれを行いましたが、独自のフォークを作成する必要があります
まず、セッション キーを同じ名前にする必要があります。それが最も簡単な仕事です。
次に、redis-store gem のフォークを作成し、マーシャリングの場所を変更しました。javascript 用の Ruby スタイルのマーシャル モジュールを見つけるのは簡単ではないため、両側で json について話す必要があります。マーシャリングを変更するファイル
また、接続のセッション ミドルウェア部分も置き換える必要がありました。作成されるハッシュは非常に具体的で、レールが作成するものとは一致しません。もっと良い方法があるかもしれないので、解決するためにこれをあなたに任せる必要があります。接続をフォークすることもできましたが、代わりに、接続 > ミドルウェア > セッション アウトのコピーを抽出し、独自のインを要求しました。
Rails バージョンには存在しない基本変数が元のバージョンにどのように追加されているかに気付くでしょう。さらに、レールがノードの代わりにセッションを作成した場合を処理する必要があります。これは、generateCookie 関数が行うことです。
/***** ORIGINAL *****/
// session hashing function
store.hash = function(req, base) {
return crypto
.createHmac('sha256', secret)
.update(base + fingerprint(req))
.digest('base64')
.replace(/=*$/, '');
};
// generates the new session
store.generate = function(req){
var base = utils.uid(24);
var sessionID = base + '.' + store.hash(req, base);
req.sessionID = sessionID;
req.session = new Session(req);
req.session.cookie = new Cookie(cookie);
};
/***** MODIFIED *****/
// session hashing function
store.hash = function(req, base) {
return crypto
.createHmac('sha1', secret)
.update(base)
.digest('base64')
.replace(/=*$/, '');
};
// generates the new session
store.generate = function(req){
var base = utils.uid(24);
var sessionID = store.hash(req, base);
req.sessionID = sessionID;
req.session = new Session(req);
req.session.cookie = new Cookie(cookie);
};
// generate a new cookie for a pre-existing session from rails without session.cookie
// it must not be a Cookie object (it breaks the merging of cookies)
store.generateCookie = function(sess){
newBlankCookie = new Cookie(cookie);
sess.cookie = newBlankCookie.toJSON();
};
//... at the end of the session.js file
// populate req.session
} else {
if ('undefined' == typeof sess.cookie) store.generateCookie(sess);
store.createSession(req, sess);
next();
}
これがうまくいくことを願っています。彼らが同じように話すようにするには、かなりの時間を費やしました。
フラッシュメッセージがjsonに保存されているという問題も見つかりました。うまくいけば、あなたはそれを見つけません。Flash メッセージには、シリアライズ時に json が吹き飛ばす特別なオブジェクト構造があります。フラッシュ メッセージがセッションから復元されると、適切なフラッシュ オブジェクトがない可能性があります。これにもパッチを当てる必要がありました。