Ruby on rails 使用redis store在rails和node.js之间共享身份验证
我有一个rails应用程序和一个node.js应用程序,我使用Desive对用户进行身份验证。我用Redis存储会话。现在,我希望当用户转到节点应用程序时,应用程序通过socket.io检查用户是否登录。我设法从redis获取了会话数据,但我不知道如何解释它们以检查用户是否登录 下面是我的节点应用程序代码,它检查数据库中是否存在会话id,并检索会话数据:Ruby on rails 使用redis store在rails和node.js之间共享身份验证,ruby-on-rails,node.js,authentication,devise,redis,Ruby On Rails,Node.js,Authentication,Devise,Redis,我有一个rails应用程序和一个node.js应用程序,我使用Desive对用户进行身份验证。我用Redis存储会话。现在,我希望当用户转到节点应用程序时,应用程序通过socket.io检查用户是否登录。我设法从redis获取了会话数据,但我不知道如何解释它们以检查用户是否登录 下面是我的节点应用程序代码,它检查数据库中是否存在会话id,并检索会话数据: io.set('authorization', function (data, accept) { if (data.headers.
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 store gem似乎在将会话存储到数据库之前调用了编组方法。因此,我通过重写编组方法绕过了这个问题,并将会话数据存储为JSON格式。它不是很优雅,所以如果您找到更好的方法在rails和node.js之间共享会话,请告诉我。创建自己的oauth api可能更容易(有一个railscast介绍如何实现oauth)。据我所知,Desive是一个ruby宝石,并不是真正的跨平台,但oauth几乎可以用在任何语言中。您可以添加一个oauth令牌来设计,该令牌应该允许您将该令牌传递给node.js。您可以轻松地完成这项工作,只需对Rails Cookie Parser for Express library中的index.js方法进行一些调整,就可以在没有Express的情况下使用它 此库使用封送处理npm作为其依赖项 注意:您可能需要解码UriComponent(“cookie值”),因为原始cookie是URL编码的,看起来这应该是Ruby的
Marshal.dump(hash_var)
函数的结果。我想你可以找到js代码来阅读这种格式。但是,您的解决方案似乎更简单、更优雅。