В настоящее время я пытаюсь настроить базовую систему аутентификации для моего приложения node.js. На данный момент я использую экспресс (3.0.0rc5), паспорт (0.1.12) и socket.io(0.9.10) с Mongoose as Store для данных сеанса. Я также играл с everyauth
, но мне не нравилось работать с promises.
Текущая ситуация:
Успешно завершена аутентификация с помощью паспорта (стратегия facebook), на клиенте после перенаправления установлен файл cookie session.sid
, и я могу видеть документ сеанса в моей базе данных. Я могу получить доступ к cookie сеанса в socket.io
через socket.handshake.headers.cookie
.
Если я правильно понял концепцию паспорта, после того, как будет вызван успешный authentication passport.serializeUser
, который позволяет мне добавлять информацию на сеанс. В моем случае самая важная информация - это электронная почта, поэтому я устанавливаю сериализатор следующим образом:
passport.serializeUser(function(user, done) {
done(null, user.email);
});
Теперь я нахожусь в точке, где мне нужно использовать только информацию cookie в своем событии socket.io, чтобы извлечь адрес электронной почты из сеанса.
var connect = require('connect'),
parseSignedCookie = connect.utils.parseSignedCookie,
cookie = require('express/node_modules/cookie');
io.on('connection', function(socket) {
if(socket.handshake.headers.cookie) {
var cookie = cookie.parse(socket.handshake.headers.cookie);
var sessionID = parseSignedCookie(cookie['connect.sid'], 'secret');
}
});
passport.deserializeUser(function(id, done) {
// so, what is supposed to be done here?
});
Итак, если я не ошибаюсь, задача теперь использовать deserializeUser
для доступа к соответствующему адресу электронной почты.
Как мне это сделать? Любые указатели высоко оценены.