аутентификация пользователей / socket io

#javascript #authentication #node.js #websocket #socket.io

#javascript #аутентификация #node.js #websocket #socket.io

Вопрос:

Я новичок в этом, я создаю игру, в которой пользователям нужно войти в систему и они могут взаимодействовать друг с другом или с подмножеством других пользователей, вошедших в систему в данный момент.

Моя первоначальная мысль заключается в том, что после входа в систему добавьте их / их идентификатор клиента websocket в массив зарегистрированных в данный момент пользователей и сделайте так, чтобы я манипулировал этим, чтобы узнать, кто вошел в систему или нет.

Это обычный способ делать подобные вещи?

Спасибо!

Ответ №1:

Зависит от вашего определения «нормального». 😉

Обычно используемый вами сервер предоставляет некоторый механизм для управления «состоянием пользователя», включая то, вошел ли пользователь в ваше приложение.

Например, библиотека ‘express’ узла (и ‘connect’, которую express использует ‘underneath’) предоставляет объект req.session именно для этой цели, чтобы вы могли делать такие вещи, как:

 // user login via POST
//   assumes we're posting two values: username and password
//   as urlencoded data

app.post('/login',function(req,res){

  var username=req.body['username']||'',
      password=req.body['password']||'';

  // check post data (username,password) 
  // against list of allowed users

  if(isAuthorized(username,password)) { // you provide isAuthorized()
    req.session.authorized=true;
  }
  else {
    // display an error message to user
    // and redirect back to the login form
  }
});

// user logout via GET
app.get('/logout',function(req.res){
  req.session.destroy();
});
  

Затем, когда вы хотите предоставить защищенные страницы пользователю, сначала проверьте, верно ли значение req.session.authorized, и если нет, перенаправьте на форму входа.

Подробнее смотрите документы для Express по адресу http://expressjs.com/guide.html

Комментарии:

1. Как насчет обмена данными между подмножеством зарегистрированных пользователей? Буду ли я использовать некоторую часть express для их идентификации? или при подключении, когда authorized = true, я бы сохранил их идентификатор клиента в своем собственном объекте в памяти до отключения?

2. Без знания ваших требований было бы трудно ответить на ваш вопрос. Одним из возможных способов «сгруппировать» ваших пользователей может быть добавление тегов к записи пользователя для указания членства в одной или нескольких группах, которые могут использоваться, когда пользователь желает общаться с другими членами группы. Это можно было бы легко объединить с функцией pub / sub Redis для обработки межгрупповых сообщений.

Ответ №2:

Только что нашел окончательное решение здесь: http://www.danielbaulig.de/socket-ioexpress

В нем объясняется, как использовать сеансы либо в express, либо node.js . И вы можете использовать RedisStore для постоянных сеансов (идеально, когда вы перезапускаете сервер 3 раза в минуту :))

Комментарии:

1. Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки.