Я пытаюсь использовать старую библиотеку balloons.io в качестве базы для приложения для чата, но это совершенно устарело, в этом конкретном коде я пытаюсь выяснить, как использовать экспресс-4x для разбора файла cookie, чтобы получить sid не получая его от req.session
express.js разбор куки?
Поскольку express 4x больше не использует connect
, как я могу сделать что-то похожее на приведенное ниже, но в новой экспресс-версии?
/*
* Module dependencies
*/
var sio = require('socket.io')
, parseCookies = require('connect').utils.parseSignedCookies
, cookie = require('cookie')
, fs = require('fs');
/**
* Expose Sockets initialization
*/
module.exports = Sockets;
/**
* Socket.io
*
* @param {Express} app `Express` instance.
* @param {HTTPServer} server `http` server instance.
* @api public
*/
function Sockets (app, server) {
var config = app.get('config');
var client = app.get('redisClient');
var sessionStore = app.get('sessionStore');
var io = sio.listen(server);
io.set('authorization', function (hsData, accept) {
if(hsData.headers.cookie) {
var cookies = parseCookies(cookie.parse(hsData.headers.cookie), config.session.secret)
, sid = cookies['balloons'];
sessionStore.load(sid, function(err, session) {
if(err || !session) {
return accept('Error retrieving session!', false);
}
hsData.balloons = {
user: session.passport.user,
room: /\/(?:([^\/]+?))\/?$/g.exec(hsData.headers.referer)[1]
};
return accept(null, true);
});
} else {
return accept('No cookie transmitted.', false);
}
});
});
};
Да, я видел это, вы правы. Однако я не могу понять, как получить sid без объекта req. –
Я не уверен, что такое hsData, но если значение sid хранится в подписанных «воздушных шарах» cookie, и у вас есть секретный доступ, то вы должны как-то получить его значение. Возможно, попробуйте взглянуть на источник cookie-parser и посмотреть, какая функция делает что. –
ОК, спасибо, ты прав! –