如何使用Django身份验证对Node应用程序中的用户进行身份验证?

时间:2012-05-06 03:10:08

标签: django node.js authentication

我的主应用程序是一个Django应用程序,但是,对于一些实时的东西,我想使用Node / Socket.IO。我正在使用Redis从Django到Node(再到各种客户端)做一些pub / sub。棘手的部分是如何根据Django身份验证对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中支持,所以我可以通过那里。只是好奇是否有更好的方法去做。

2 个答案:

答案 0 :(得分:3)

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

http://yourdjangoserver.com/authenticate

这将返回一些包含您需要的信息的JSON。如果您希望保护API不受公众监督,请将其设为私有或使用基本身份验证等方式保护它。

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

答案 1 :(得分:3)

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

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