8

我的主应用程序是一个 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 提供支持,因此我可以通过那里进行操作。只是好奇是否有更好的方法来解决它。

4

2 回答 2

4

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

http://yourdjangoserver.com/authenticate

这将返回一些带有您需要的信息的 JSON。如果您希望保护 API 免受公众审查,那么要么将其设为私有,要么使用基本身份验证等保护它。

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

于 2012-05-06T07:29:05.407 回答
3

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

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

于 2012-06-09T11:22:05.530 回答