Skip to content

Commit

Permalink
Make initialization optional when using login.
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredhanson committed Jan 23, 2014
1 parent 8068981 commit e3f58dd
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 4 deletions.
12 changes: 8 additions & 4 deletions lib/passport/http/request.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,22 @@ var http = require('http')
*/
req.login =
req.logIn = function(user, options, done) {
if (!this._passport) throw new Error('passport.initialize() middleware not in use');

if (!done && typeof options === 'function') {
if (typeof options == 'function') {
done = options;
options = {};
}
options = options || {};
var property = this._passport.instance._userProperty || 'user';

var property = 'user';
if (this._passport && this._passport.instance) {
property = this._passport.instance._userProperty || 'user';
}
var session = (options.session === undefined) ? true : options.session;

this[property] = user;
if (session) {
if (!this._passport) throw new Error('passport.initialize() middleware not in use');

var self = this;
this._passport.instance.serializeUser(user, this, function(err, obj) {
if (err) { self[property] = null; return done(err); }
Expand Down
41 changes: 41 additions & 0 deletions test/http/request.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,36 @@ describe('http.ServerRequest', function() {
});
});

describe('not establishing a session, without passport.initialize() middleware', function() {
var req = new http.IncomingMessage();

var error;

before(function(done) {
var user = { id: '1', username: 'root' };

req.login(user, { session: false }, function(err) {
error = err;
done();
});
});

it('should not error', function() {
expect(error).to.be.undefined;
});

it('should be authenticated', function() {
expect(req.isAuthenticated()).to.be.true;
expect(req.isUnauthenticated()).to.be.false;
});

it('should set user', function() {
expect(req.user).to.be.an('object');
expect(req.user.id).to.equal('1');
expect(req.user.username).to.equal('root');
});
});

describe('establishing a session', function() {
var passport = new Passport();
passport.serializeUser(function(user, done) {
Expand Down Expand Up @@ -270,6 +300,17 @@ describe('http.ServerRequest', function() {
});
});

describe('establishing a session, without passport.initialize() middleware', function() {
var req = new http.IncomingMessage();
var user = { id: '1', username: 'root' };

it('should throw an exception', function() {
expect(function() {
req.login(user, function(err) {});
}).to.throw(Error, 'passport.initialize() middleware not in use');
});
});

});


Expand Down

0 comments on commit e3f58dd

Please sign in to comment.