[Groonga-commit] droonga/express-droonga at ca5b642 [master] Add mechanism to share session information with socket.io and HTTP connections

Back to archive index

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����������������������������...
다운로드 



More information about the Groonga-commit mailing list
Back to archive index