ruby-on-rails - rails 和 node.js 之间的共享身份验证与 redis 存储

标签 ruby-on-rails node.js authentication devise redis

我有一个 Rails 应用程序和一个 node.js 应用程序,我使用 Devise 对用户进行身份验证。我用 Redis 存储 session 。现在我希望当用户转到 Node 应用程序时,该应用程序通过 socket.io 检查用户是否已登录。我设法从 Redis 获取 session 数据,但我不知道如何解释它们以检查用户是否已登录。

这是我的 Node 应用程序代码,它检查数据库中是否存在 _session_id 并检索 session 数据:

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(session) 给我的:

{I"_csrf_token:EFI"1HPglfkCCagvb1LLraU1CEEyx7AtDzztqAEPY5G5lNgY=;FI"warden.user.user.key;TI"    User;F[iI""$2a$10$IHq2WAhwbaqR4WWajRE/Yu;T

如何检查用户是否使用 Node 应用程序登录到 Rails 应用程序? 谢谢

编辑: 看来我使用的 redis 存储 gem 在将 session 存储到数据库之前调用了编码方法。所以我通过重写 Marshalling 方法并以 JSON 格式存储 session 数据来绕过这个问题。它不是很优雅,所以如果您找到在 Rails 和 node.js 之间共享 session 的更好方法,请告诉我。

最佳答案

创建您自己的 oauth api 可能更容易(有一个关于如何执行此 oauth 的 railscast)。据我所知,devise 是一个 ruby​​ gem,并不是真正的跨平台,但 oauth 几乎可以在任何语言中使用。您可以添加一个 oauth token 来设计允许您将该 token 传递给 node.js。

关于ruby-on-rails - rails 和 node.js 之间的共享身份验证与 redis 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042879/

相关文章:

authentication - 是否可以在不重定向到外部登录页面的情况下进行SPA身份验证

php - 如果用户使用 php 登录,如何仅使页面可访问

ruby-on-rails - 很棒的嵌套设置顺序

ruby-on-rails - rails 太阳黑子/Solr : Ordering on multiple-value field

javascript - Node js与express不加载mongodb数据库内容

javascript - 当字符串在双引号中包含单引号时,如何在 Javascript 中将此字符串转换为 JSON 对象

node.js - MongoDB mongoose 多对多关系

Javascript 迭代哈希错误

ruby-on-rails - 事件管理员编辑页面的 URL

带有 token 的python http请求