【问题标题】:How do I authenticate a user in a Node app with Django authentication?如何使用 Django 身份验证在 Node 应用程序中对用户进行身份验证?
【发布时间】:2012-05-06 03:10:08
【问题描述】:

我的主应用程序是一个 Django 应用程序,但是,对于一些实时的东西,我想使用 Node/Socket.IO。我正在使用 Redis 做一些从 Django 到 Node 的 pub/sub(然后到各种客户端)。棘手的部分是如何根据 Django auth 对 Node 用户进行身份验证?

在我的 Node 应用程序中,我有:

io.on('connection', function (socket) {
  const subscribe = redis.createClient();
  var userId = authenticateAndGetUserId();
  subscribe.subscribe(userId + ':feed-items');

  subscribe.on('message', function (channel, message) {
    socket.emit('feed-items', JSON.parse(message));
  });

});

所以我的问题是实施authenticateAndGetUserId 的好策略是什么?会话由 MySQL 提供支持,因此我可以通过那里进行操作。只是好奇是否有更好的方法。

【问题讨论】:

    标签: django node.js authentication


    【解决方案1】:

    在 Django 方面,我将公开一个 REST API。然后在 Node.js 上,您可以执行 POST 用户名/密码之类的操作

    http://yourdjangoserver.com/authenticate

    这将返回一些带有您需要的信息的 JSON。如果您希望保护 API 不受公众审查,那么要么将其设为私有,要么使用基本身份验证之类的方式对其进行保护。

    restify 是一个 npm 包,它使得在 Node.js 端使用 REST API 变得非常容易。这种架构的好处是它是松耦合的。你可以用任何东西替换 Django,而客户端永远不会知道。

    【讨论】:

    • 这个。我在我的 Django 用户配置文件模型中创建了一个“api 密钥”字段,密钥是随机生成的。然后,您可以拥有一个简单的 HTTP 端点/API,它采用该密钥并确定它是否属于有效用户。
    • 这不会让 node.js 阻塞吗?那么在这种情况下,node.js 有什么用呢?
    • 我不明白为什么这会使 Node.js 阻塞
    【解决方案2】:

    由于您已经有一个 redis 服务器,您可以为每个登录的用户存储 (username, sessionkey) 对,可选择与您的会话设置相对应的 TTL 值。

    然后,每次用户请求订阅频道时,他都会发送他的用户名,然后根据 redis 数据存储进行检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 2019-01-10
      • 1970-01-01
      • 2021-06-11
      • 2019-09-14
      • 2018-12-23
      • 2021-07-26
      • 1970-01-01
      相关资源
      最近更新 更多