Skip to content

Commit

Permalink
Factor login into session manager.
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredhanson committed Aug 11, 2017
1 parent c0c7f8e commit 997dc51
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 10 deletions.
12 changes: 11 additions & 1 deletion lib/authenticator.js
@@ -1,7 +1,8 @@
/**
* Module dependencies.
*/
var SessionStrategy = require('./strategies/session');
var SessionStrategy = require('./strategies/session')
, SessionManager = require('./sessionmanager');


/**
Expand Down Expand Up @@ -29,6 +30,7 @@ function Authenticator() {
Authenticator.prototype.init = function() {
this.framework(require('./framework/connect')());
this.use(new SessionStrategy());
this._sm = new SessionManager({ key: this._key }, this.serializeUser.bind(this));
};

/**
Expand Down Expand Up @@ -231,6 +233,14 @@ Authenticator.prototype.session = function(options) {
return this.authenticate('session', options);
};

// TODO: Make session manager pluggable
/*
Authenticator.prototype.sessionManager = function(mgr) {
this._sm = mgr;
return this;
}
*/

/**
* Registers a function used to serialize user objects into the session.
*
Expand Down
10 changes: 1 addition & 9 deletions lib/http/request.js
Expand Up @@ -47,16 +47,8 @@ req.logIn = function(user, options, done) {
if (typeof done != 'function') { throw new Error('req#login requires a callback function'); }

var self = this;
this._passport.instance.serializeUser(user, this, function(err, obj) {
this._passport.instance._sm.logIn(this, user, function(err) {
if (err) { self[property] = null; return done(err); }
if (!self._passport.session) {
self._passport.session = {};
}
self._passport.session.user = obj;
if (!self.session) {
self.session = {};
}
self.session[self._passport.instance._key] = self._passport.session;
done();
});
} else {
Expand Down
32 changes: 32 additions & 0 deletions lib/sessionmanager.js
@@ -0,0 +1,32 @@
function SessionManager(options, serializeUser) {
if (typeof options == 'function') {
serializeUser = options;
options = undefined;
}
options = options || {};

this._key = options.key || 'passport';
this._serializeUser = serializeUser;
}

SessionManager.prototype.logIn = function(req, user, cb) {
var self = this;
this._serializeUser(user, req, function(err, obj) {
if (err) {
return cb(err);
}
if (!req._passport.session) {
req._passport.session = {};
}
req._passport.session.user = obj;
if (!req.session) {
req.session = {};
}
// TODO: Remove instance access, in favor of _key option
req.session[req._passport.instance._key] = req._passport.session;
cb();
});
}


module.exports = SessionManager;

0 comments on commit 997dc51

Please sign in to comment.