これは私が作成したプロジェクトでそれを行った方法です。キーとしてユーザー名を使用し、値としてsocket.idを使用しました。次に、クライアントハッシュで、socket.idをキーとして使用し、socketを値として使用しました。これにより、ユーザー名に基づいて、「有効な」ユーザーに非常に簡単にメッセージを送信できます。
ソケットの詳細を保存し、メッセージを送信します
var validUsers = {};
var clients = {};
io.sockets.on('connection', function (socket)
{
var hs = socket.handshake;
if(hs.session)
{
if(hs.session.username)
{
clients[socket.id] = socket; // add the client data to the hash
validUsers[hs.session.username] = socket.id; // connected user with its socket.id
}
}
...
clients[validUsers[username]].emit('move-story', data);
}
認証+セッションの取得
//Auth the user
io.set('authorization', function (data, accept) {
// check if there's a cookie header
if (data.headers.cookie) {
data.cookie = parseCookie(data.headers.cookie);
data.sessionID = data.cookie['express.sid'];
//Save the session store to the data object
data.sessionStore = sessionStore;
sessionStore.get(data.sessionID, function(err, session){
if(err) throw err;
if(!session)
{
console.error("Error whilst authorizing websocket handshake");
accept('Error', false);
}
else
{
console.log("AUTH USERNAME: " + session.username);
if(session.username){
data.session = new Session(data, session);
accept(null, true);
}else {
accept('Invalid User', false);
}
}
})
} else {
console.error("No cookie was found whilst authorizing websocket handshake");
return accept('No cookie transmitted.', false);
}
});