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和读取会话
- MEAN堆栈 – 如何允许API访问权限只有login(电子邮件/密码和Facebooklogin)的用户
- 如何向Google Analytics报告API v4进行身份validation
- nodejs护照authentication令牌
- 我的AJAX代码(将Firebase令牌发送到服务器)有什么问题?
- express.basicAuth抛出错误
- validation在NodeJS中使用php crypt()生成的哈希?
- API将不会使用MSAL通过SPA传递的令牌对AAD进行身份validation
- 设置passport-jwtauthentication
- Laravel 5:使用Laravel会话数据的Socket.io客户机authentication