Node.js聊天 - 用户认证

时间:2011-04-21 08:56:29

标签: php authentication node.js

我最近设置了一个nodejs聊天服务器,聊天客户端由php服务器提供服务。当用户登录时,他们的会话将存储在php服务器的mysql中,登录cookie将附加到浏览器。

我想限制只有登录用户才能聊天的用户。实现这一目标的最佳做法是什么?

我的想法很快:

当加载聊天客户端时,如果用户登录,我将通过套接字将登录cookie信息发送到nodejs verver。然后创建一个nodejs会话。当用户聊天时,消息连同cookie信息将通过socket发送到nodejs服务器。如果cookie信息与nodejs会话不匹配,则不会广播该消息,并且将终止客户端套接字。

2 个答案:

答案 0 :(得分:3)

websocket是一个永久的开放连接。您只需要在连接到websocket时进行一次验证。

只需将您的登录cookie发送到node.js一次,然后将其存储在服务器上并引用套接字连接。然后,只处理来自经过身份验证的用户的邮件,并仅向经过身份验证的用户广播。

问题是客户端用户可以轻易伪造此cookie,因为节点不与php通信以确保它是有效的登录cookie。

使用now的示例。

警告伪代码

// server.js
everyone.now.joinChat = function(cookie) {
    chat.add(this, cookie);
}

everyone.now.serverMessage = function(message) {
    if (chat.hasUser(this)) {
        chat.broadcast(message);
    }
}

chat = (function() {
    var users = [];

    return {
         "add": function(client) {
             users.push(client);
         },
         "hasUser": function(client) {
             return users.some(function(user) {
                 return user === client;
             });
         },
         "broadcast": function(message) {
              users.each(function(user) {
                  user.clientMessage(message);
              });
         }
    }
}());

// client.js
$(function() {
    now.joinChat($.cookie("login"));

    $("#send").click(function() {
         now.serverMessage($(this).data("message"));
    });

    now.clientMessage = function(message) {
         $("#messages").append($("<span></span>").text(message));
    }

});

答案 1 :(得分:0)