Skip to content

Commit 13c550c

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 906a0ec + 821a474 commit 13c550c

File tree

9 files changed

+95
-42
lines changed

9 files changed

+95
-42
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,5 @@ This project is supported by ![](http://passportjs.org/images/supported_logo.svg
174174

175175
Copyright (c) 2011-2015 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)>
176176

177+
<a target='_blank' rel='nofollow' href='https://app.codesponsor.io/link/vK9dyjRnnWsMzzJTQ57fRJpH/jaredhanson/passport'> <img alt='Sponsor' width='888' height='68' src='https://app.codesponsor.io/embed/vK9dyjRnnWsMzzJTQ57fRJpH/jaredhanson/passport.svg' /></a>
178+

lib/authenticator.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
/**
22
* Module dependencies.
33
*/
4-
var SessionStrategy = require('./strategies/session');
4+
var SessionStrategy = require('./strategies/session')
5+
, SessionManager = require('./sessionmanager');
56

67

78
/**
@@ -28,7 +29,8 @@ function Authenticator() {
2829
*/
2930
Authenticator.prototype.init = function() {
3031
this.framework(require('./framework/connect')());
31-
this.use(new SessionStrategy());
32+
this.use(new SessionStrategy(this.deserializeUser.bind(this)));
33+
this._sm = new SessionManager({ key: this._key }, this.serializeUser.bind(this));
3234
};
3335

3436
/**
@@ -231,6 +233,14 @@ Authenticator.prototype.session = function(options) {
231233
return this.authenticate('session', options);
232234
};
233235

236+
// TODO: Make session manager pluggable
237+
/*
238+
Authenticator.prototype.sessionManager = function(mgr) {
239+
this._sm = mgr;
240+
return this;
241+
}
242+
*/
243+
234244
/**
235245
* Registers a function used to serialize user objects into the session.
236246
*

lib/http/request.js

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,8 @@ req.logIn = function(user, options, done) {
4747
if (typeof done != 'function') { throw new Error('req#login requires a callback function'); }
4848

4949
var self = this;
50-
this._passport.instance.serializeUser(user, this, function(err, obj) {
50+
this._passport.instance._sm.logIn(this, user, function(err) {
5151
if (err) { self[property] = null; return done(err); }
52-
if (!self._passport.session) {
53-
self._passport.session = {};
54-
}
55-
self._passport.session.user = obj;
56-
if (!self.session) {
57-
self.session = {};
58-
}
59-
self.session[self._passport.instance._key] = self._passport.session;
6052
done();
6153
});
6254
} else {
@@ -77,8 +69,8 @@ req.logOut = function() {
7769
}
7870

7971
this[property] = null;
80-
if (this._passport && this._passport.session) {
81-
delete this._passport.session.user;
72+
if (this._passport) {
73+
this._passport.instance._sm.logOut(this);
8274
}
8375
};
8476

lib/sessionmanager.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
function SessionManager(options, serializeUser) {
2+
if (typeof options == 'function') {
3+
serializeUser = options;
4+
options = undefined;
5+
}
6+
options = options || {};
7+
8+
this._key = options.key || 'passport';
9+
this._serializeUser = serializeUser;
10+
}
11+
12+
SessionManager.prototype.logIn = function(req, user, cb) {
13+
var self = this;
14+
this._serializeUser(user, req, function(err, obj) {
15+
if (err) {
16+
return cb(err);
17+
}
18+
if (!req._passport.session) {
19+
req._passport.session = {};
20+
}
21+
req._passport.session.user = obj;
22+
if (!req.session) {
23+
req.session = {};
24+
}
25+
req.session[self._key] = req._passport.session;
26+
cb();
27+
});
28+
}
29+
30+
SessionManager.prototype.logOut = function(req, cb) {
31+
if (req._passport && req._passport.session) {
32+
delete req._passport.session.user;
33+
}
34+
cb && cb();
35+
}
36+
37+
38+
module.exports = SessionManager;

lib/strategies/session.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,16 @@ var pause = require('pause')
1111
*
1212
* @api public
1313
*/
14-
function SessionStrategy() {
14+
function SessionStrategy(options, deserializeUser) {
15+
if (typeof options == 'function') {
16+
deserializeUser = options;
17+
options = undefined;
18+
}
19+
options = options || {};
20+
1521
Strategy.call(this);
1622
this.name = 'session';
23+
this._deserializeUser = deserializeUser;
1724
}
1825

1926
/**
@@ -50,11 +57,12 @@ SessionStrategy.prototype.authenticate = function(req, options) {
5057
// matter, refer to: https://github.com/jaredhanson/passport/pull/106
5158

5259
var paused = options.pauseStream ? pause(req) : null;
53-
req._passport.instance.deserializeUser(su, req, function(err, user) {
60+
this._deserializeUser(su, req, function(err, user) {
5461
if (err) { return self.error(err); }
5562
if (!user) {
5663
delete req._passport.session.user;
5764
} else {
65+
// TODO: Remove instance access
5866
var property = req._passport.instance._userProperty || 'user';
5967
req[property] = user;
6068
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "passport",
3-
"version": "0.3.2",
3+
"version": "0.4.0",
44
"description": "Simple, unobtrusive authentication for Node.js.",
55
"keywords": [
66
"express",

test/authenticator.middleware.test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,9 @@ describe('Authenticator', function() {
220220

221221
describe('handling a request', function() {
222222
var passport = new Authenticator();
223+
passport.deserializeUser(function(user, done) {
224+
done(null, { id: user });
225+
});
223226

224227
var request, error;
225228

@@ -230,9 +233,6 @@ describe('Authenticator', function() {
230233

231234
req._passport = {};
232235
req._passport.instance = {};
233-
req._passport.instance.deserializeUser = function(user, req, done) {
234-
done(null, { id: user });
235-
};
236236
req._passport.session = {};
237237
req._passport.session.user = '123456';
238238
})

test/strategies/session.pause.test.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ describe('SessionStrategy', function() {
1616

1717

1818
var SessionStrategy = $require('../../lib/strategies/session', { pause: pause });
19-
var strategy = new SessionStrategy();
19+
var strategy = new SessionStrategy(function(user, req, done) {
20+
done(null, { id: user });
21+
});
2022

2123
var request, pass = false;
2224

@@ -31,9 +33,6 @@ describe('SessionStrategy', function() {
3133

3234
req._passport = {};
3335
req._passport.instance = {};
34-
req._passport.instance.deserializeUser = function(user, req, done) {
35-
done(null, { id: user });
36-
};
3736
req._passport.session = {};
3837
req._passport.session.user = '123456';
3938
})
@@ -79,7 +78,9 @@ describe('SessionStrategy', function() {
7978

8079

8180
var SessionStrategy = $require('../../lib/strategies/session', { pause: pause });
82-
var strategy = new SessionStrategy();
81+
var strategy = new SessionStrategy(function(user, req, done) {
82+
done(null, false);
83+
});
8384

8485
var request, pass = false;
8586

@@ -94,9 +95,6 @@ describe('SessionStrategy', function() {
9495

9596
req._passport = {};
9697
req._passport.instance = {};
97-
req._passport.instance.deserializeUser = function(user, req, done) {
98-
done(null, false);
99-
};
10098
req._passport.session = {};
10199
req._passport.session.user = '123456';
102100
})

test/strategies/session.test.js

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ describe('SessionStrategy', function() {
4141
});
4242

4343
describe('handling a request with a login session', function() {
44+
var strategy = new SessionStrategy(function(user, req, done) {
45+
done(null, { id: user });
46+
});
47+
4448
var request, pass = false;
4549

4650
before(function(done) {
@@ -54,9 +58,6 @@ describe('SessionStrategy', function() {
5458

5559
req._passport = {};
5660
req._passport.instance = {};
57-
req._passport.instance.deserializeUser = function(user, req, done) {
58-
done(null, { id: user });
59-
};
6061
req._passport.session = {};
6162
req._passport.session.user = '123456';
6263
})
@@ -79,6 +80,10 @@ describe('SessionStrategy', function() {
7980
});
8081

8182
describe('handling a request with a login session serialized to 0', function() {
83+
var strategy = new SessionStrategy(function(user, req, done) {
84+
done(null, { id: user });
85+
});
86+
8287
var request, pass = false;
8388

8489
before(function(done) {
@@ -92,9 +97,6 @@ describe('SessionStrategy', function() {
9297

9398
req._passport = {};
9499
req._passport.instance = {};
95-
req._passport.instance.deserializeUser = function(user, req, done) {
96-
done(null, { id: user });
97-
};
98100
req._passport.session = {};
99101
req._passport.session.user = 0;
100102
})
@@ -117,6 +119,10 @@ describe('SessionStrategy', function() {
117119
});
118120

119121
describe('handling a request with a login session that has been invalidated', function() {
122+
var strategy = new SessionStrategy(function(user, req, done) {
123+
done(null, false);
124+
});
125+
120126
var request, pass = false;
121127

122128
before(function(done) {
@@ -130,9 +136,6 @@ describe('SessionStrategy', function() {
130136

131137
req._passport = {};
132138
req._passport.instance = {};
133-
req._passport.instance.deserializeUser = function(user, req, done) {
134-
done(null, false);
135-
};
136139
req._passport.session = {};
137140
req._passport.session.user = '123456';
138141
})
@@ -154,6 +157,10 @@ describe('SessionStrategy', function() {
154157
});
155158

156159
describe('handling a request with a login session and setting custom user property', function() {
160+
var strategy = new SessionStrategy(function(user, req, done) {
161+
done(null, { id: user });
162+
});
163+
157164
var request, pass = false;
158165

159166
before(function(done) {
@@ -168,9 +175,6 @@ describe('SessionStrategy', function() {
168175
req._passport = {};
169176
req._passport.instance = {};
170177
req._passport.instance._userProperty = 'currentUser';
171-
req._passport.instance.deserializeUser = function(user, req, done) {
172-
done(null, { id: user });
173-
};
174178
req._passport.session = {};
175179
req._passport.session.user = '123456';
176180
})
@@ -192,6 +196,10 @@ describe('SessionStrategy', function() {
192196
});
193197

194198
describe('handling a request with a login session that encounters an error when deserializing', function() {
199+
var strategy = new SessionStrategy(function(user, req, done) {
200+
done(new Error('something went wrong'));
201+
});
202+
195203
var request, error;
196204

197205
before(function(done) {
@@ -205,9 +213,6 @@ describe('SessionStrategy', function() {
205213

206214
req._passport = {};
207215
req._passport.instance = {};
208-
req._passport.instance.deserializeUser = function(user, req, done) {
209-
done(new Error('something went wrong'));
210-
};
211216
req._passport.session = {};
212217
req._passport.session.user = '123456';
213218
})

0 commit comments

Comments
 (0)