Skip to content

Commit

Permalink
Merge pull request #1012 from jaredhanson/authinfo-assignprop
Browse files Browse the repository at this point in the history
Set req.authInfo when using assignProperty option
  • Loading branch information
jaredhanson committed Nov 27, 2023
2 parents cfdbd4a + 0f2f81c commit 2815dc9
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 1 deletion.
11 changes: 10 additions & 1 deletion lib/middleware/authenticate.js
Expand Up @@ -250,7 +250,16 @@ module.exports = function authenticate(passport, name, options, callback) {
}
if (options.assignProperty) {
req[options.assignProperty] = user;
return next();
if (options.authInfo !== false) {
passport.transformAuthInfo(info, req, function(err, tinfo) {
if (err) { return next(err); }
req.authInfo = tinfo;
next();
});
} else {
next();
}
return;
}

req.logIn(user, options, function(err) {
Expand Down
49 changes: 49 additions & 0 deletions test/authenticator.middleware.test.js
Expand Up @@ -245,6 +245,55 @@ describe('Authenticator', function() {
expect(request.account.username).to.equal('jaredhanson');
});

it('should set authInfo to empty object', function() {
expect(request.authInfo).to.deep.equal({});
});
});

describe('handling a request with authInfo disabled', function() {
function Strategy() {
}
Strategy.prototype.authenticate = function(req) {
var user = { id: '1', username: 'jaredhanson' };
this.success(user);
};

var passport = new Authenticator();
passport.use('success', new Strategy());

var request, error;

before(function(done) {
chai.connect.use(passport.authorize('success', { authInfo: false }))
.req(function(req) {
request = req;

req.logIn = function(user, options, done) {
this.user = user;
done();
};
})
.next(function(err) {
error = err;
done();
})
.dispatch();
});

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

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

it('should set account', function() {
expect(request.account).to.be.an('object');
expect(request.account.id).to.equal('1');
expect(request.account.username).to.equal('jaredhanson');
});

it('should not set authInfo', function() {
expect(request.authInfo).to.be.undefined;
});
Expand Down
49 changes: 49 additions & 0 deletions test/middleware/authenticate.success.test.js
Expand Up @@ -98,6 +98,55 @@ describe('middleware/authenticate', function() {
expect(request.account.username).to.equal('jaredhanson');
});

it('should set authInfo to empty object', function() {
expect(request.authInfo).to.deep.equal({});
});
});

describe('success that assigns a specific property with authInfo disabled', function() {
function Strategy() {
}
Strategy.prototype.authenticate = function(req) {
var user = { id: '1', username: 'jaredhanson' };
this.success(user);
};

var passport = new Passport();
passport.use('success', new Strategy());

var request, error;

before(function(done) {
chai.connect.use(authenticate(passport, 'success', { assignProperty: 'account', authInfo: false }))
.req(function(req) {
request = req;

req.logIn = function(user, options, done) {
this.user = user;
done();
};
})
.next(function(err) {
error = err;
done();
})
.dispatch();
});

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

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

it('should set account', function() {
expect(request.account).to.be.an('object');
expect(request.account.id).to.equal('1');
expect(request.account.username).to.equal('jaredhanson');
});

it('should not set authInfo', function() {
expect(request.authInfo).to.be.undefined;
});
Expand Down

0 comments on commit 2815dc9

Please sign in to comment.