Node.js passport.socketio一直在说-到socket.io的连接失败:未找到会话
我试图访问socket.io中的session对象,如req.user,以便对其进行处理,我使用Node.js passport.socketio一直在说-到socket.io的连接失败:未找到会话,node.js,session,express,socket.io,passport.socketio,Node.js,Session,Express,Socket.io,Passport.socketio,我试图访问socket.io中的session对象,如req.user,以便对其进行处理,我使用passport.socket.iolibrary来执行此操作。但是现在的问题是,我一直无法连接到socket。io:找不到会话。 这是密码 var express = require('express'); var session = require('express-session'); var cookieParser = require('cookie-parser')
passport.socket.io
library来执行此操作。但是现在的问题是,我一直无法连接到socket。io:找不到会话。
这是密码
var express = require('express');
var session = require('express-session');
var cookieParser = require('cookie-parser');
var MongoStore = require('connect-mongo/es5')(session);
var passport = require('passport');
var passportSocketIo = require("passport.socketio");
var config = require('./config/config');
var sessionStore = new MongoStore({ url: config.database, autoReconnect: true });
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.use(cookieParser());
app.use(session({
resave: true,
saveUninitialized: true,
secret: config.secret,
store: sessionStore
}));
app.use(passport.initialize());
app.use(passport.session());
io.use(passportSocketIo.authorize({
cookieParser: cookieParser,
key: express.sid, // Not really sure how to get this key?
secret: config.secret,
store: sessionStore,
success: onAuthorizeSuccess,
fail: onAuthorizeFail,
}));
function onAuthorizeSuccess(data, accept){
console.log('successful connection to socket.io');
accept(null, true);
}
function onAuthorizeFail(data, message, error, accept){
if(error)
throw new Error(message);
console.log('failed connection to socket.io:', message);
accept(null, false);
if(error)
accept(new Error(message));
}
io.connect('connection', function(socket) {
console.log("Something Here");
});
http.listen(3000);
它继续运行此功能,因为passport未能与socket.io
onAuthorizeFail
进行握手。如何解决这个问题?在我浏览了express session
文档之后,这是钥匙的问题
我已经通过更改解决了这个问题
express.sid => 'connect.sid'
io.use(passportSocketIo.authorize({
key: 'connect.sid'
}));
似乎默认情况下express将提供“connect.sid”