Fixed some small bugs, now sharing session between Express and Socket.io.

master
Håvar Aambø Fosstveit 2019-10-22 15:04:28 +02:00
parent 4181afd1a3
commit 0299e5f661
2 changed files with 24 additions and 35 deletions

View File

@ -11,16 +11,13 @@
"base-64": "^0.1.0", "base-64": "^0.1.0",
"colors": "^1.1.2", "colors": "^1.1.2",
"compression": "^1.7.3", "compression": "^1.7.3",
"connect-redis": "^4.0.3",
"cookie-parser": "^1.4.4",
"debug": "^4.1.0", "debug": "^4.1.0",
"express": "^4.16.3", "express": "^4.16.3",
"express-session": "^1.16.1", "express-session": "^1.16.1",
"express-socket.io-session": "^1.3.5",
"mediasoup": "^3.0.12", "mediasoup": "^3.0.12",
"openid-client": "^2.5.0", "openid-client": "^2.5.0",
"passport": "^0.4.0", "passport": "^0.4.0",
"passport.socketio": "^3.7.0",
"redis": "^2.8.0",
"socket.io": "^2.1.1", "socket.io": "^2.1.1",
"spdy": "^4.0.0" "spdy": "^4.0.0"
}, },

View File

@ -19,19 +19,19 @@ const base64 = require('base-64');
// auth // auth
const passport = require('passport'); const passport = require('passport');
const { Issuer, Strategy } = require('openid-client'); const { Issuer, Strategy } = require('openid-client');
const session = require('express-session'); const session = require('express-session')({
const passportSocketIo = require('passport.socketio'); secret : config.cookieSecret,
const cookieParser = require('cookie-parser'); resave : true,
// Session storage saveUninitialized : true,
const redis = require('redis'); cookie : { secure: true }
const RedisStore = require('connect-redis')(session); });
const redisClient = redis.createClient(); const sharedSession = require('express-socket.io-session');
/* eslint-disable no-console */ /* eslint-disable no-console */
console.log('- process.env.DEBUG:', process.env.DEBUG); console.log('- process.env.DEBUG:', process.env.DEBUG);
console.log('- config.mediasoup.logLevel:', config.mediasoup.logLevel); console.log('- config.mediasoup.logLevel:', config.mediasoup.logLevel);
console.log('- config.mediasoup.logTags:', config.mediasoup.logTags); console.log('- config.mediasoup.logTags:', config.mediasoup.logTags);
/* eslint-enable no-console */ /* eslint-enable nopassportSocketIo-console */
const logger = new Logger(); const logger = new Logger();
@ -55,9 +55,10 @@ const tls =
key : fs.readFileSync(config.tls.key) key : fs.readFileSync(config.tls.key)
}; };
const sessionStore = new RedisStore({ client: redisClient });
const app = express(); const app = express();
app.use(session);
let httpsServer; let httpsServer;
let oidcClient; let oidcClient;
let oidcStrategy; let oidcStrategy;
@ -82,7 +83,7 @@ async function run()
typeof(auth.clientOptions) !== 'undefined' typeof(auth.clientOptions) !== 'undefined'
) )
{ {
Issuer.discover(auth.issuerURL).then( async (oidcIssuer) => Issuer.discover(auth.issuerURL).then(async (oidcIssuer) =>
{ {
// Setup authentication // Setup authentication
await setupAuth(oidcIssuer); await setupAuth(oidcIssuer);
@ -96,10 +97,10 @@ async function run()
// Run WebSocketServer. // Run WebSocketServer.
await runWebSocketServer(); await runWebSocketServer();
}) })
.catch((err) => .catch((err) =>
{ {
logger.error(err); logger.error(err);
}); });
} }
else else
{ {
@ -206,18 +207,10 @@ async function setupAuth(oidcIssuer)
passport.use('oidc', oidcStrategy); passport.use('oidc', oidcStrategy);
app.use(session({
secret : config.cookieSecret,
resave : true,
saveUninitialized : true,
store : sessionStore,
cookie : { secure: true }
}));
app.use(passport.initialize()); app.use(passport.initialize());
app.use(passport.session()); app.use(passport.session());
// login // loginparams
app.get('/auth/login', (req, res, next) => app.get('/auth/login', (req, res, next) =>
{ {
passport.authenticate('oidc', { passport.authenticate('oidc', {
@ -328,12 +321,11 @@ async function runWebSocketServer()
{ {
const io = require('socket.io')(httpsServer); const io = require('socket.io')(httpsServer);
io.use(passportSocketIo.authorize({ io.use(
secret : config.cookieSecret, sharedSession(session, {
passport : passport, autoSave: true
cookieParser : cookieParser, })
store : sessionStore, );
}));
// Handle connections from clients. // Handle connections from clients.
io.on('connection', (socket) => io.on('connection', (socket) =>