UNPKG

multi-process-session

Version:
80 lines (74 loc) 2.32 kB
// Generated by CoffeeScript 2.3.1 (function() { /* Created by massimo on 2014/4/14. */ var Session, _, sessionHelper; _ = require("underscore"); sessionHelper = require('./sessionHelper'); Session = require('./session'); /* session middleware @param {Object} options @param {String} [options.type="cookie"] session type: cookie or token @param {Number} [options.expire=604800] expire seconds @param {Boolean} [options.refresh=true] refresh every time @param {String} [options.secret="guess me if you can"] secret for generate session id @param {Object} [options.redisOptions] options to create redis client */ module.exports = function(options) { var defaultOptions; defaultOptions = { type: "cookie", expire: 604800, refresh: true, // auto refresh cookie secret: 'guess me if you can', redisOptions: { host: '127.0.0.1', port: 6379 } }; options = _.extend(defaultOptions, options); return function(req, res, next) { var SESSION_ID, session, sid; sid = ""; if (options.type === "cookie") { // is browser SESSION_ID = "sid"; //cookie if (req.cookies) { sid = req.cookies[SESSION_ID]; if (!sid) { sid = sessionHelper.genSID(options.secret); res.cookie(SESSION_ID, sid, { // save cookie maxAge: options.expire * 1000 }); } else if (options.refresh) { res.cookie(SESSION_ID, sid, { // save cookie maxAge: options.expire * 1000 }); } } else { throw new Error("no cookie support"); // is api } } else { sid = req.query.Token || sessionHelper.genSID(options.secret); } res.on("finish", function() { return res.session && res.session.save(options.expire, function(err) { if (err) { return console.error(err); } }); }); return session = new Session(sid, options.redisOptions, function(err) { if (err) { console.error(err); return next(err); } else { req.session = res.session = session; return next(); } }); }; }; }).call(this);