Node.js聊天 – 用户authentication

我最近build立了一个nodejs聊天服务器,聊天客户端由php服务器提供服务。 当用户login时,他们的会话将被存储在php服务器的mysql中,并且一个logincookie将被附加到浏览器。

我想限制只有login用户才能聊天的用户。 实践这个最好的做法是什么?

我很快就想到:

当聊天客户端加载时,如果用户login,我会通过套接字发送logincookie信息到nodejs verver。 然后创build一个nodejs会话。 用户聊天时,消息连同cookie信息将通过套接字发送到nodejs服务器。 如果cookie信息与nodejs会话不匹配,消息将不会被广播,客户端套接字将被丢弃。

websocket是一个永久的开放连接。 当你连接到websocket时,你只需要一次authentication。

只需将您的logincookie发送给node.js一次,并将其存储在服务器上,并引用套接字连接。 然后只处理来自已authentication用户的消息,并仅向经过authentication的用户进行广播。

问题是,客户端用户可以很容易地伪造这个cookie,因为节点不会与php通话,以确保它是一个有效的logincookie。

现在使用一个例子。

警告伪代码

// 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)); } }); 

这是我正在寻找nodeJS的答案- 如何使用express创build和读取会话