Node.js Passport未显示在session socket.io中
问题Node.js Passport未显示在session socket.io中,node.js,mongodb,express,session-cookies,Node.js,Mongodb,Express,Session Cookies,问题 我正在尝试根据类似于post的express会话对用户进行身份验证。在http请求中,这是req.session返回的内容。我还连接了我的mongo存储来保存会话,但它的行为也类似于套接字会话,只返回cookie而不返回会话信息 //user not authenticated Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }, passport: {}
我正在尝试根据类似于post的express会话对用户进行身份验证。在http请求中,这是req.session返回的内容。我还连接了我的mongo存储来保存会话,但它的行为也类似于套接字会话,只返回cookie而不返回会话信息
//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',
}
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)
})
但是,当我尝试使用后引用passport对象使用socket io调用socket.request.session时,不会返回。但是我非常确定中间件是有效的,否则根本就没有会话
// 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 }
}
设置:
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)
});
var sessionMiddleware=会话({
秘密:'',
名称:'profile_session',
雷萨夫:是的,
saveUninitialized:true,
存储区:新MongoStore({mongooseConnection:mongoose.connection})
})
应用程序使用(sessionMiddleware);
io.use(函数(套接字,下一个){
//包装express中间件
sessionMiddleware(socket.request,{},next);
})
io.on('连接',(套接字)=>{
log('a user connected id:',socket.id);
console.log(socket.request.session)
});
问题似乎是saveUninitialized
设置为true,即使没有用户登录,它也会保存会话。您还可以在io
中使用中间件来获取用户信息
//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',
}
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)
})
var sessionMiddleware=会话({
秘密:'',
名称:'profile_session',
雷萨夫:是的,
saveUninitialized:false,
存储区:新MongoStore({mongooseConnection:mongoose.connection})
})
const wrap=(中间件)=>(socket,next)=>中间件(socket.request,{},next);
io.use(wrap(sessionMiddleware));
io.use(wrap(passport.initialize());
io.use(wrap(passport.session());
io.on(“连接”,“插座)=>{
const session=socket.request.session;
const user=socket.request.user
console.log(会话)
console.log(用户)
})
问题似乎是saveUninitialized
设置为true,即使没有用户登录,它也会保存会话。您还可以在io
中使用中间件来获取用户信息
//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',
}
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)
})
var sessionMiddleware=会话({
秘密:'',
名称:'profile_session',
雷萨夫:是的,
saveUninitialized:false,
存储区:新MongoStore({mongooseConnection:mongoose.connection})
})
const wrap=(中间件)=>(socket,next)=>中间件(socket.request,{},next);
io.use(wrap(sessionMiddleware));
io.use(wrap(passport.initialize());
io.use(wrap(passport.session());
io.on(“连接”,“插座)=>{
const session=socket.request.session;
const user=socket.request.user
console.log(会话)
console.log(用户)
})
trysocket.handshake.session
Nope,此处未安装会话trysocket.handshake.session
Nope,此处未安装会话