【问题标题】:Node.js chat - user authenticationNode.js 聊天 - 用户身份验证
【发布时间】:2011-08-10 03:39:07
【问题描述】:

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

我想限制只有登录用户才能聊天的用户。存档的最佳做法是什么?

我的快速思考:

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

【问题讨论】:

标签: php authentication node.js


【解决方案1】:

这就是我正在寻找的答案nodeJS - How to create and read session with express

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • “将其存储在服务器上,并引用套接字连接”你能举个例子来说明如何做到这一点吗?
    • @runrunforest now.js 可以为您做到这一点。我会写一个例子。你可以用 socket.io 做同样的事情,你可以用你自己的 websocket 实现做同样的事情,只需要自己编写坚韧的细节。
    猜你喜欢
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多