我有一個rails應用程序和一個node.js應用程序,我使用Devise來認證用戶。我將會話存儲在Redis中。現在,當用戶轉到節點應用程序時,我希望該應用程序通過socket.io檢查用戶是否已登錄。我設法從redis獲取會話數據,但我不知道如何解釋它們以檢查用戶是否已登錄。rails和node.js與redis商店之間的共享認證
這是我的代碼,用於檢查數據庫中是否存在_session_id,檢索會話DATAS:
io.set('authorization', function (data, accept) {
if (data.headers.cookie) {
data.cookie = cookie.parse(data.headers.cookie);
data.sessionID = data.cookie['_session_id'];
redis.get(data.sessionID, function (err, session) {
if (err || !session) {
accept('Error', false);
} else {
data.session = session;
console.log(session);
accept(null, true);
}
});
} else {
return accept('No cookie transmitted.', false);
}
});
這就是執行console.log(會話)給我:
{I"_csrf_token:EFI"1HPglfkCCagvb1LLraU1CEEyx7AtDzztqAEPY5G5lNgY=;FI"warden.user.user.key;TI" User;F[iI""$2a$10$IHq2WAhwbaqR4WWajRE/Yu;T
如何檢查用戶是否在與節點應用Rails應用程序登錄? 感謝
編輯:看來,Redis的商店寶石,我使用數據庫中存儲會話之前調用編組方法。所以我繞過了這個問題,重寫了編組方法並以JSON格式存儲了會話數據。這不是很優雅,所以如果你找到一個更好的方式來共享rails和node.js之間的會話,請讓我知道。
看着https://github.com/vangberg /rack-session-redis/blob/master/lib/rack/session/redis.rb它看起來應該是Ruby的'Marshal.dump(hash_var)'函數的結果。我想你可以找到js代碼來閱讀這種格式。但是,您的解決方案看起來更簡單,更優雅。 – nimrodm