Skip to content

Commit e3c6a8c

Browse files
committed
Support extra params when refreshing token
1 parent e6987c5 commit e3c6a8c

File tree

2 files changed

+54
-10
lines changed

2 files changed

+54
-10
lines changed

lib/refresh.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
'use strict';
22

3+
var isString = function(str) {
4+
return typeof str === 'string' || str instanceof String;
5+
};
6+
37
var AuthTokenRefresh = {};
48

59
AuthTokenRefresh._strategies = {};
@@ -16,10 +20,12 @@ AuthTokenRefresh._strategies = {};
1620
* @param {String|Strategy} name
1721
* @param {Strategy} passport strategy
1822
*/
19-
AuthTokenRefresh.use = function(name, strategy) {
20-
if(arguments.length === 1) {
21-
// Infer name from strategy
23+
AuthTokenRefresh.use = function(name, strategy, params) {
24+
if(!isString(name)) {
25+
params = strategy;
2226
strategy = name;
27+
28+
// Infer name from strategy
2329
name = strategy && strategy.name;
2430
}
2531

@@ -37,6 +43,9 @@ AuthTokenRefresh.use = function(name, strategy) {
3743
throw new Error('Cannot register: not an OAuth2 strategy');
3844
}
3945

46+
params = params || {};
47+
params.grant_type = 'refresh_token';
48+
4049
// Use the strategy's OAuth2 object, since it might have been overwritten.
4150
// https://github.com/fiznool/passport-oauth2-refresh/issues/3
4251
var OAuth2 = strategy._oauth2.constructor;
@@ -45,7 +54,7 @@ AuthTokenRefresh.use = function(name, strategy) {
4554
// Use the strategy's _refreshURL, if defined,
4655
// otherwise use the regular accessTokenUrl.
4756
AuthTokenRefresh._strategies[name] = {
48-
strategy: strategy,
57+
params: params,
4958
refreshOAuth2: new OAuth2(
5059
strategy._oauth2._clientId,
5160
strategy._oauth2._clientSecret,
@@ -82,8 +91,7 @@ AuthTokenRefresh.requestNewAccessToken = function(name, refreshToken, done) {
8291
return done(new Error('Strategy was not registered to refresh a token'));
8392
}
8493

85-
var params = { grant_type: 'refresh_token' };
86-
strategy.refreshOAuth2.getOAuthAccessToken(refreshToken, params, done);
94+
strategy.refreshOAuth2.getOAuthAccessToken(refreshToken, strategy.params, done);
8795
};
8896

8997
module.exports = AuthTokenRefresh;

test/refresh.spec.js

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ describe('Auth token refresh', function() {
3434

3535
AuthTokenRefresh.use('explicit_name', strategy);
3636

37-
expect(AuthTokenRefresh._strategies.explicit_name.strategy).to.equal(strategy);expect(AuthTokenRefresh._strategies.strategy).to.be.undefined;
37+
expect(AuthTokenRefresh._strategies.explicit_name).to.be.defined;
38+
expect(AuthTokenRefresh._strategies.internal_name).to.be.undefined;
3839
});
3940

4041
it('should add a strategy without an explicitly defined name', function() {
@@ -45,7 +46,7 @@ describe('Auth token refresh', function() {
4546

4647
AuthTokenRefresh.use(strategy);
4748

48-
expect(AuthTokenRefresh._strategies.internal_name.strategy).to.equal(strategy);
49+
expect(AuthTokenRefresh._strategies.internal_name).to.be.defined;
4950
});
5051

5152
it('should add a strategy with a refreshURL', function() {
@@ -56,7 +57,6 @@ describe('Auth token refresh', function() {
5657
};
5758

5859
AuthTokenRefresh.use(strategy);
59-
expect(AuthTokenRefresh._strategies.test_strategy.strategy).to.equal(strategy);
6060
expect(AuthTokenRefresh._strategies.test_strategy.refreshOAuth2._accessTokenUrl).to.equal('refreshURL');
6161
});
6262

@@ -67,7 +67,6 @@ describe('Auth token refresh', function() {
6767
};
6868

6969
AuthTokenRefresh.use(strategy);
70-
expect(AuthTokenRefresh._strategies.test_strategy.strategy).to.equal(strategy);
7170
expect(AuthTokenRefresh._strategies.test_strategy.refreshOAuth2._accessTokenUrl).to.equal('accessTokenUrl');
7271
});
7372

@@ -81,7 +80,41 @@ describe('Auth token refresh', function() {
8180
AuthTokenRefresh.use(strategy);
8281
expect(AuthTokenRefresh._strategies.test_strategy.refreshOAuth2).to.not.equal(strategyOAuth2);
8382
expect(AuthTokenRefresh._strategies.test_strategy.refreshOAuth2).to.be.instanceof(OAuth2);
83+
});
84+
85+
it('should add a strategy with an explicit name and params', function() {
86+
var strategyOAuth2 = newOAuth2();
87+
var strategy = {
88+
name: 'test_strategy',
89+
_oauth2: strategyOAuth2
90+
};
91+
var params = {
92+
some: 'extra_param'
93+
};
94+
95+
AuthTokenRefresh.use('explicit_strategy', strategy, params);
96+
expect(AuthTokenRefresh._strategies.explicit_strategy.params).to.eql({
97+
some: 'extra_param',
98+
grant_type: 'refresh_token'
99+
});
100+
expect(AuthTokenRefresh._strategies.test_strategy).to.be.undefined;
101+
});
102+
103+
it('should add a strategy with explicit params', function() {
104+
var strategyOAuth2 = newOAuth2();
105+
var strategy = {
106+
name: 'test_strategy',
107+
_oauth2: strategyOAuth2
108+
};
109+
var params = {
110+
some: 'extra_param'
111+
};
84112

113+
AuthTokenRefresh.use(strategy, params);
114+
expect(AuthTokenRefresh._strategies.test_strategy.params).to.eql({
115+
some: 'extra_param',
116+
grant_type: 'refresh_token'
117+
});
85118
});
86119

87120
it('should not add a null strategy', function() {
@@ -143,6 +176,9 @@ describe('Auth token refresh', function() {
143176

144177
AuthTokenRefresh._strategies = {
145178
test_strategy: {
179+
params: {
180+
grant_type: 'refresh_token'
181+
},
146182
refreshOAuth2: {
147183
getOAuthAccessToken: getOAuthAccessTokenSpy
148184
}

0 commit comments

Comments
 (0)