YUKI Hiroshi
null+****@clear*****
Fri Jan 10 18:58:49 JST 2014
YUKI Hiroshi 2014-01-10 18:58:49 +0900 (Fri, 10 Jan 2014) New Revision: ca5b64217532e3d7bd5ebc5de5c013199bd36726 https://github.com/droonga/express-droonga/commit/ca5b64217532e3d7bd5ebc5de5c013199bd36726 Message: Add mechanism to share session information with socket.io and HTTP connections Modified files: application.js lib/adapter/socket.io.js Modified: application.js (+12 -0) =================================================================== --- application.js 2014-01-10 16:10:59 +0900 (88db307) +++ application.js 2014-01-10 18:58:49 +0900 (788a6da) @@ -6,10 +6,22 @@ var express = require('express'), var application = express(); var server = http.createServer(application); + +var MemoryStore = express.session.MemoryStore; +var sessionStore = new MemoryStore(); +application.configure(function() { + application.use(express.cookieParser('secret key')); + application.use(express.session({ + secret: 'secret key', + store: sessionStore + })); +}); + application.droonga({ prefix: '', defaultDataset: 'example', server: server, + sessionStore: sessionStore, // this is required to share session information by socket.io and HTTP APIs plugins: [ droonga.API_REST, droonga.API_SOCKET_IO, Modified: lib/adapter/socket.io.js (+29 -0) =================================================================== --- lib/adapter/socket.io.js 2014-01-10 16:10:59 +0900 (d832cf6) +++ lib/adapter/socket.io.js 2014-01-10 18:58:49 +0900 (4f140a7) @@ -1,4 +1,5 @@ var socketIo = require('socket.io'); +var connect = require('connect'); var command = require('./command'); var wrapper = require('./wrapper'); var api = require('./api'); @@ -159,6 +160,34 @@ exports.register = function(application, server, params) { }); var io = socketIo.listen(server); + + // share session information with HTTP connections + var parseCookie = connect.utils.parseCookie; + var sessionStore = params.sessionStore; + io.configure(function() { + io.set('authorization', function(handshakeData, callback) { + if (handshakeData.headers.cookie) { + var cookie = handshakeData.headers.cookie; + var sessionID = parseCookie(cookie)['connect.sid']; + handshakeData.sessionID = sessionID; + if (sessionStore) { + sessionStore.get(sessionID, function(error, session) { + if (error) { + callback(error, false); + } else { + handshakeData.session = session; + callback(null, true); + } + }); + } else { + callback(null, true); + } + } else { + return callback(new Error('no cookie'), false); + } + }); + }); + io.sockets.on('connection', function(socket) { application.emit('connection', socket); -------------- next part -------------- HTML����������������������������... 다운로드