@LemanRass09

Express + socket.io как связать в кучу?

Здравствуйте.
Делаю сайт с использованием node.js с пакетами express и socket.io.
Что то вроде такого:
app.get('/rules', function(req, res)
{
	fs.readFile("C:/Apache24/htdocs/site/rules.html", "utf-8", function(err, data)
	{
		if(err) throw err;
		res.send(data);
	});
});

и так под каждую страницу.

Есть у меня еще socket.io на сервере, пока только в таком виде:
io.on('connection', function (socket) 
{
	console.log("New user connected!");	
	
	socket.on('disconnect', function() 
	{
      console.log('User disconnected!');
   });
});


Мне нужно было добавить авторизацию через steam, и я ее сделал с помощью этого пакета.

Теперь сам вопрос.
Авторизация через steam происходит строго через express при этом socket.io там вообще не при делах.
После авторизации куда бы пользователь не перешел, инфу о нем всегда можно будет найти в первом параметре callback функции от express маршрутизатора в виде: req.user. Но socket io ничего о нем не знает и работает вообще отдельно.
Я бы хотел связать socket.io соккет с id юзера (остальная инфа о нем будет хранится в бд) в виде ассоциативного массива что бы по id пользователя я мог спокойно отправлять пакеты ему через socket.io. Но не знаю как это сделать потому что socket.io и express вообще не пересекаются между собой в моем приложении. Express знает все про пользователя который авторизирован но не знает его socket.io соккет. Socket.io знает соккет пользователя но понятия не имеет какой пользователь - владелец этого соккета.
  • Вопрос задан
  • 634 просмотра
Решения вопроса 1
@Nwton
Сталкивался с задачей авторизации steam на node js + socket.

Суть самой steam-login в том, что бы убедится, что пользователь, который предоставил вам данные о steam аккаунте, дейтсвительно является его владельцем. Т.е., steam авторизация это в первую очередь проверка. После авторизации через steam-login вы получаете логин steam аккаунта пользователя. От него и пляшите.

1) Пользователь проходит авторизацию через steam-login. Вы получаете login пользователя.
2) Создаете куку и привязываете её к login, добавляете в базу. В браузере пользователя также устанавливаете эту куку.
3) При socket connect достаете куки браузера, по кукам ищите логин в базе и всё. Теперь вы знаете, какой именно пользователь отправляет socket запросы.

p.s. Я использовал passport-steam вместо steam-login
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы