Eli*_*ard 6 authentication ruby-on-rails redis node.js devise
我有一个rails应用程序和一个node.js应用程序,我使用Devise来验证用户.我将会话存储在Redis中.现在我想当用户转到节点应用程序时,应用程序通过socket.io检查用户是否已登录.我设法从redis获取会话数据,但我不知道如何解释它们以检查用户是否已登录.
这是节点应用程序的代码,它检查数据库中是否存在_session_id并检索会话数据:
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);
}
});
Run Code Online (Sandbox Code Playgroud)
这就是console.log(session)给我的东西:
{I"_csrf_token:EFI"1HPglfkCCagvb1LLraU1CEEyx7AtDzztqAEPY5G5lNgY=;FI"warden.user.user.key;TI" User;F[iI""$2a$10$IHq2WAhwbaqR4WWajRE/Yu;T
Run Code Online (Sandbox Code Playgroud)
如何检查用户是否使用节点应用程序登录rails应用程序?谢谢
编辑:看来我使用的redis存储gem在将会话存储到数据库之前调用了一个编组方法.所以我通过覆盖编组方法并以JSON格式存储会话数据来绕过问题.这不是很优雅,所以如果你找到一个更好的方式来共享rails和node.js之间的会话,请告诉我.
创建自己的 oauth api 可能会更容易(有一个关于如何执行此 oauth 的railscast)。据我所知,devise 是一个 ruby gem,并不是真正的跨平台,但 oauth 几乎可以在任何语言中使用。您可以添加一个 oauth 令牌来设计,它应该允许您将该令牌传递给 node.js。
| 归档时间: |
|
| 查看次数: |
2021 次 |
| 最近记录: |