В node.js и express есть много примеров, показывающих, как получить данные сеанса.
Как вы можете видеть, когда вы посещаете третью ссылку, это ссылка на StackOverflow. Был хороший ответ, но, как отмечалось в комментариях от @UpTheCreek, соединение уже не имеет метода parseCookie. Я просто столкнулся с этой проблемой. Все обучающие программы, которые я нашел, используют метод connect parseCookie
, который в настоящее время не существует. Поэтому я спросил его, как мы можем получить данные сеанса, и он сказал, что не знает лучшего подхода, поэтому я подумал, что поставил бы здесь вопрос. При использовании [email protected]
, socket.io
и redis
, как мы можем получить данные сеанса и использовать это для авторизации пользователя? Я смог использовать require('connect').utils.parseSignedCookie;
, но когда я это делаю, я всегда получаю предупреждение/ошибку при рукопожатии,
warn - handshake error Error
и из того, что я прочитал, похоже, что это не постоянное решение.
UPDATE
Хорошо, я получил session.socket.io
, работая на моем сервере. И, как я подозревал, я застрял в санкционировании. Я думаю, что, возможно, я ошибаюсь, поэтому не стесняйтесь меня исправлять. В моей базе данных Redis у меня будет информация о пользователе. При первом входе в систему я хочу обновить свой файл cookie, чтобы он содержал их информацию о пользователе. Затем, в следующий раз, когда они вернутся на сайт, я хочу проверить, есть ли у них файл cookie и есть ли информация пользователя. Если его нет, я хочу отправить их на экран входа в систему. На экране входа в систему, когда пользователь отправляет информацию, он будет тестировать эту информацию в базе данных Redis, и если она будет соответствовать, она обновит файл cookie с информацией пользователя. Мои вопросы таковы:
1) Как я могу обновить/изменить файл cookie через RedisStore?
2) Похоже, данные сеанса сохраняются только в файлах cookie. Как я могу отслеживать информацию пользователя со страницы на страницу, если кто-то отключил cookies?
Вот мой применимый код:
//...hiding unapplicable code...
var redis = require('socket.io/node_modules/redis');
var client = redis.createClient();
var RedisStore = require('connect-redis')(express);
var redis_store = new RedisStore();
var cookieParser = express.cookieParser('secret');
app.configure(function(){
//...hiding unapplicable code...
app.use(cookieParser);
app.use(express.session({secret: 'secret', store: redis_store}));
});
//...hiding code that starts the server and socket.io
var SessionSockets = require('session.socket.io');
var ssockets = new SessionSockets(io, redis_store, cookieParser);
io.configure(function(){
io.set('authorization', function(handshake, callback){
if(handshake.headers.cookie){
//var cookie = parseCookie(handshake.headers.cookie);
//if(cookie.user){
// handshake.user = cookie.user;
//}
}
callback(null, true);
});
});
ssockets.on('connection', function(err, socket, session){ ... });