【发布时间】:2018-08-22 17:05:24
【问题描述】:
我的设置:
护照:
基本的序列化、反序列化用户:
passport.serializeUser(function(user, done) { //serialize user
done(null, user.id);
});
passport.deserializeUser(function(id, done) { // deserialize user
User.findById(id, function(err, user) {
if(err) {
console.error('There was an error accessing the records of' +
' user with id: ' + id);
return done(err);
}
return done(null, user);
})
});
使用本地登录。
SessionMiddleWareStore 和应用配置:
sessionStore = new mongoStore({
mongooseConnection: mongoose.connection,
touchAfter: 24 * 3600});
var sessionMware = session({
name: 'socialify.sess', store: sessionStore, secret: sessionSecret, resave: false,
saveUninitialized: true, cookie: {maxAge: 1000 * 60 * 60 * 24},
secret: "eknfdjsnfjsdfn852"
});
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.use(cookieParser());
app.use(sessionMware)
io.use(function (socket, next) {
sessionMware(socket.request, socket.request.res, next);
});
Server.js(主文件):
var httpsServer = https.createServer(options, app)
io.listen(httpsServer);
httpsServer.listen(port, function () {
return console.log('Socialify server listening on %s at port %d in %s mode', host, port, env);
});
问题:
我试图管理如何在所有这些东西(passport、httpRequest 和 socket.io)之间共享会话 似乎 io 有一个会话,但不是好的会话。因为:
var userSockets = {};
io.on('connection', function (socket) {
console.log(socket.request.session) // is ok but doesn't contain passport array.
var ID = socket.request.session.passport.user; // passport.user undefined.. grrr !
userSockets[ID] = socket;
socket.on('disconnect', function () {
delete userSockets[ID];
return console.log('The client has disconnected');
});
});
当我尝试存储所有用户 [id] 并将其导出以便共享时,我需要此 id 来访问 http 请求中的套接字。
【问题讨论】:
标签: node.js socket.io passport.js