#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. Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки.