Node.js chat - аутентификация пользователя - PullRequest
7 голосов
/ 21 апреля 2011

Я недавно настроил сервер чата nodejs, клиент чата обслуживается сервером php. Когда пользователи входят в систему, их сеансы сохраняются в mysql php-сервера, и cookie-файл входа добавляется в браузер.

Я хочу ограничить пользователей, которые только вошли в систему, могут общаться в чате. Как лучше всего это архивировать?

Моя быстрая мысль:

Когда клиент чата загружен, если пользователь вошел в систему, я отправлю информацию о cookie-файлах для входа в nodejs verver через сокет. Затем создайте сеанс nodejs. Когда пользователь общается, сообщение вместе с информацией о куки будет отправлено на сервер nodejs через сокет. Если информация о файлах cookie не соответствует сеансу nodejs, сообщение не будет транслироваться, и сокет клиента будет отменен.

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

Веб-розетка - это постоянное открытое соединение.Вам нужно только выполнить аутентификацию один раз при подключении к веб-сокету.

Просто один раз отправьте свой cookie-файл для входа на сайт node.js и сохраните его на сервере со ссылкой на подключение к сокету.Затем обрабатывайте только сообщения от прошедших проверку пользователей и передавайте их только проверенным пользователям.

Проблема заключается в том, что пользователи на стороне клиента могут легко подделать этот файл cookie, поскольку узел не обращается к php, чтобы убедиться, что это действительный файл cookie входа в систему.*

Пример использования сейчас .

предупреждение псевдокода

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

});
0 голосов
/ 26 апреля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...