Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- This is just a hacky approach to get things moving, as passport-socketio library
- does not support cookie-sessions.
- */
- var Promise = require("bluebird");
- var passport = require("passport");
- var session = require("cookie-session");
- var sessionConfig = {
- secret: "secret-goes-here",
- resave: false,
- saveUninitialized: true,
- name: "cookie-name-goes-here",
- signed: true
- };
- var configuredSessionMiddleware = session(sessionConfig);
- var parseCookieSession = function(socket) {
- var dummyRequest = {
- headers: {
- cookie: socket.request.headers.cookie || ''
- }
- };
- var dummyResponse = {};
- return new Promise(function(resolve, reject){
- var passportProperty = passport._key;
- var userProperty = passport._userProperty;
- configuredSessionMiddleware(dummyRequest, dummyResponse, function(error){
- if(error) { return reject(error); }
- if(!dummyRequest.session[passportProperty]) { return reject("Authentication data not provided"); }
- if(!dummyRequest.session[passportProperty][userProperty]) { return reject("User data not provided"); }
- var userId = dummyRequest.session[passportProperty][userProperty];
- return resolve(userId);
- });
- });
- };
- var getUserData = function(userId) {
- return new Promise(function(resolve, reject){
- passport.deserializeUser(userId, function(err, user) {
- if (err) { return reject(err);}
- if (!user) { return reject("User not found"); }
- resolve(user);
- });
- });
- };
- var assignUserToSocket = function(socket, user)
- { socket.request.user = user; };
- module.exports = function(socket, next) {
- Promise.resolve(socket)
- .then(parseCookieSession)
- .then(getUserData)
- .then(function(user) {
- assignUserToSocket(socket, user);
- })
- .then(function() { next(); })
- .catch(function(error){
- next(new Error('unable to authorise'));
- });
- };
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement