The Problem
I am trying to authenticate users based on my express session similar to this post. In http request this is what req.session returns I also connected my mongo store to hold sessions but it also behaves like socket session returning only cookie without session information.
//user not authenticated
Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
passport: {}
}
//user authenticated
Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
passport: {
user: {
_json: [Object],
id: '76561198298457222',
}
But when i try to socket.request.session with socket io using the post refrenced passport object is not returned. But i am pretty sure that the middleware works beacuse otherwise there is no session at all.
// user not authenticated
Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }
}// user should be authenticated
Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }
}
Setup:
var sessionMiddleware = session({
secret: '<secret>',
name: 'profile_session',
resave: true,
saveUninitialized: true,
store: new MongoStore({ mongooseConnection: mongoose.connection })
})
app.use(sessionMiddleware);
io.use(function (socket, next) {
// Wrap the express middleware
sessionMiddleware(socket.request, {}, next);
})
io.on('connection', (socket) => {
console.log('a user connected id:', socket.id);
console.log(socket.request.session)
});
It seems like problem is saveUninitialized
is set to true and it saves the session even when there is no user logged in. Also u can use middleware in the io
and get the user information.
var sessionMiddleware = session({
secret: '<secret>',
name: 'profile_session',
resave: true,
saveUninitialized: false,
store: new MongoStore({ mongooseConnection: mongoose.connection })
})
const wrap = (middleware) => (socket, next) => middleware(socket.request, {}, next);
io.use(wrap(sessionMiddleware));
io.use(wrap(passport.initialize()));
io.use(wrap(passport.session()));
io.on("connection", (socket) => {
const session = socket.request.session;
const user = socket.request.user
console.log(session)
console.log(user)
})
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.