Я пытаюсь сохранить все подключенные к клиенту объекты. Но, как я понял, все подключенные клиенты имеют одинаковые идентификаторы. Поэтому, если у объекта connections
есть все подключенные сокеты, когда я пытаюсь отправить сообщение на connections['mac']
, он просто появляется на моем экране как отправленный мной мне. Вот код аутентификации:Socket.io присваивает одинаковый идентификатор всем клиентам
app.post('/auth', function(req, res){ // routes.auth(hash, db, io, pseudoArray, connections)
var username = req.body.username,
password = req.body.password;
if (username != "" && password != ""){
authenticate(username, password, db, hash, function(err, user){
if (user) {
// Regenerate session when signing in
// to prevent fixation
console.log('user authenticated');
req.session.regenerate(function(){
req.session.user = user.name;
req.session.success = 'Authenticated as ' + user.name
+ ' click to <a href="/logout">logout</a>. '
+ ' You may now access <a href="/restricted">/restricted</a>.';
io.sockets.on('connection', function (socket) {
socket.set('pseudo', req.session.user, function(){
pseudoArray.push(req.session.user);
var sessionuser = req.session.user;
socket.emit('pseudoStatus', 'ok');
connections[req.session.user] = socket;
console.log("user " + req.session.user + " connected");
});
});
res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true });
res.redirect('home');
});
} else {
console.log('auth failed');
req.session.error = 'Authentication failed, please check your '
+ ' username and password.'
+ ' (use "tj" and "foobar")';
res.redirect('login');
}
});
} else {
res.redirect('connect');
}
});
код, где я отправить сообщение другому клиенту:
exports.addfriend = function(connections, io){
return function(req, res){
// var collection = db.get('go1');
var username = req.session.user;
var friend = req.body.name;
console.log(connections[''+friend+'']);
connections[''+friend+''].emit('addRequest', username);
return;
}
}
Я это Auth код в маршрутах файл раньше, и я полагаю, что я должен быть запущен в этом от app.js. Я сделал это, и он все еще не работает, как я этого хочу. Может ли кто-нибудь сказать мне, что мне не хватает?
Где находится c ode, где вы отправляете сообщение одному из подключений? – Gaurav
обновил вопрос кодом обмена – amit
Можете ли вы уменьшить это до одного файла node.js и html-файла, который демонстрирует проблему? Я думаю, что в настоящее время слишком много недостающих частей, чтобы полностью ответить на этот вопрос. Это может быть связано с регенерацией сеанса, но это очень сложно сказать. –