Sfoglia il codice sorgente

Merge pull request #10 from crowi/feature/upgrade-redis-session-handler

upgrade redis session handler
Sotaro KARASAWA 11 anni fa
parent
commit
7278cbc970
3 ha cambiato i file con 29 aggiunte e 14 eliminazioni
  1. 1 1
      README.md
  2. 23 10
      app.js
  3. 5 3
      package.json

+ 1 - 1
README.md

@@ -59,7 +59,7 @@ License
 
 
 > The MIT License (MIT)
 > The MIT License (MIT)
 >
 >
-> Copyright (c) 2013 Sotaro KARASAWA <sotarok@crocos.co.jp>
+> Copyright (c) 2013 Sotaro KARASAWA <sotaro.k@gmail.com>
 >
 >
 > Permission is hereby granted, free of charge, to any person obtaining a copy
 > Permission is hereby granted, free of charge, to any person obtaining a copy
 > of this software and associated documentation files (the "Software"), to deal
 > of this software and associated documentation files (the "Software"), to deal

+ 23 - 10
app.js

@@ -16,6 +16,7 @@ var express  = require('express')
   , middleware = require('./lib/middlewares')
   , middleware = require('./lib/middlewares')
   , time     = require('time')
   , time     = require('time')
   , async    = require('async')
   , async    = require('async')
+  , session  = require('express-session')
   , models
   , models
   , config
   , config
   , server
   , server
@@ -27,6 +28,7 @@ time.tzset('Asia/Tokyo');
 
 
 var app = express();
 var app = express();
 var env = app.get('env');
 var env = app.get('env');
+var days = (1000*3600*24*30);
 
 
 // mongoUri = mongodb://user:password@host/dbname
 // mongoUri = mongodb://user:password@host/dbname
 var mongoUri = process.env.MONGOLAB_URI
 var mongoUri = process.env.MONGOLAB_URI
@@ -38,14 +40,29 @@ mongo.connect(mongoUri);
 
 
 sessionConfig = {
 sessionConfig = {
   rolling: true,
   rolling: true,
-  secret: process.env.SECRET_TOKEN || 'this is default session secret'
+  secret: process.env.SECRET_TOKEN || 'this is default session secret',
+  resave: false,
+  saveUninitialized: true,
+  cookie: {
+    maxAge: days,
+  },
 };
 };
+var redisUrl = process.env.REDISTOGO_URL
+  || process.env.REDIS_URL
+  || null;
+
+if (redisUrl) {
+  var ru   = require("url").parse(redisUrl);
+  var redis = require("redis");
+  var redisClient = redis.createClient(ru.port, ru.hostname);
+  if (ru.auth) {
+    redisClient.auth(ru.auth.split(":")[1]);
+  }
 
 
-if (process.env.REDIS_URL) {
-  RedisStore = require('connect-redis')(express);
+  RedisStore = require('connect-redis')(session);
   sessionConfig.store = new RedisStore({
   sessionConfig.store = new RedisStore({
     prefix: 'crowi:sess:',
     prefix: 'crowi:sess:',
-    url: process.env.REDIS_URL
+    client: redisClient,
   });
   });
 }
 }
 
 
@@ -59,7 +76,7 @@ app.set('views', __dirname + '/views');
 app.use(express.methodOverride());
 app.use(express.methodOverride());
 app.use(express.bodyParser());
 app.use(express.bodyParser());
 app.use(express.cookieParser());
 app.use(express.cookieParser());
-app.use(express.session(sessionConfig));
+app.use(session(sessionConfig));
 app.use(flash());
 app.use(flash());
 
 
 configModel = require('./models/config')(app);
 configModel = require('./models/config')(app);
@@ -81,8 +98,7 @@ async.series([
 
 
     // configure application
     // configure application
     app.use(function(req, res, next) {
     app.use(function(req, res, next) {
-      var days = (1000*3600*24*30)
-        , now = new Date()
+      var now = new Date()
         , fbparams = {}
         , fbparams = {}
         , config = app.set('config');
         , config = app.set('config');
 
 
@@ -91,9 +107,6 @@ async.series([
 
 
       req.config = config;
       req.config = config;
 
 
-      req.session.cookie.expires = new Date(Date.now() + days);
-      req.session.cookie.maxAge = days;
-
       config.crowi['app:url'] = req.baseUrl = (req.headers['x-forwarded-proto'] == 'https' ? 'https' : req.protocol) + "://" + req.get('host');
       config.crowi['app:url'] = req.baseUrl = (req.headers['x-forwarded-proto'] == 'https' ? 'https' : req.protocol) + "://" + req.get('host');
       res.locals({
       res.locals({
         req: req,
         req: req,

+ 5 - 3
package.json

@@ -5,7 +5,7 @@
   "tags": [
   "tags": [
     "wiki"
     "wiki"
   ],
   ],
-  "author": "Sotaro KARASAWA <sotarok@crocos.co.jp>",
+  "author": "Sotaro KARASAWA <sotaro.k@gmail.com>",
   "contributors": [
   "contributors": [
     "Keisuke SATO <riaf@me.com> (http://riaf.jp)"
     "Keisuke SATO <riaf@me.com> (http://riaf.jp)"
   ],
   ],
@@ -23,7 +23,7 @@
     "bower": "~1.3.9",
     "bower": "~1.3.9",
     "cli": "~0.6.4",
     "cli": "~0.6.4",
     "connect-flash": "~0.1.1",
     "connect-flash": "~0.1.1",
-    "connect-redis": "^1.4.7",
+    "connect-redis": "^2.1.0",
     "consolidate": "=0.10.0",
     "consolidate": "=0.10.0",
     "debug": "^1.0.3",
     "debug": "^1.0.3",
     "express": "=3.4.4",
     "express": "=3.4.4",
@@ -47,7 +47,9 @@
     "socket.io": "~0.9.16",
     "socket.io": "~0.9.16",
     "socket.io-client": "~0.9.16",
     "socket.io-client": "~0.9.16",
     "swig": "=1.3.2",
     "swig": "=1.3.2",
-    "time": "=0.10.0"
+    "time": "=0.10.0",
+    "redis": "~0.12.1",
+    "express-session": "~1.9.3"
   },
   },
   "devDependencies": {},
   "devDependencies": {},
   "license": [
   "license": [