Skip to content

Commit 3f98a16

Browse files
committed
Send extra params when requesting access token instead
1 parent a1b1627 commit 3f98a16

File tree

2 files changed

+37
-55
lines changed

2 files changed

+37
-55
lines changed

lib/refresh.js

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

3-
var isString = function(str) {
4-
return typeof str === 'string' || str instanceof String;
5-
};
6-
73
var AuthTokenRefresh = {};
84

95
AuthTokenRefresh._strategies = {};
@@ -20,12 +16,10 @@ AuthTokenRefresh._strategies = {};
2016
* @param {String|Strategy} name
2117
* @param {Strategy} passport strategy
2218
*/
23-
AuthTokenRefresh.use = function(name, strategy, params) {
24-
if(!isString(name)) {
25-
params = strategy;
26-
strategy = name;
27-
19+
AuthTokenRefresh.use = function(name, strategy) {
20+
if(arguments.length === 1) {
2821
// Infer name from strategy
22+
strategy = name;
2923
name = strategy && strategy.name;
3024
}
3125

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

46-
params = params || {};
47-
params.grant_type = 'refresh_token';
48-
4940
// Use the strategy's OAuth2 object, since it might have been overwritten.
5041
// https://github.com/fiznool/passport-oauth2-refresh/issues/3
5142
var OAuth2 = strategy._oauth2.constructor;
@@ -54,7 +45,7 @@ AuthTokenRefresh.use = function(name, strategy, params) {
5445
// Use the strategy's _refreshURL, if defined,
5546
// otherwise use the regular accessTokenUrl.
5647
AuthTokenRefresh._strategies[name] = {
57-
params: params,
48+
strategy: strategy,
5849
refreshOAuth2: new OAuth2(
5950
strategy._oauth2._clientId,
6051
strategy._oauth2._clientSecret,
@@ -81,17 +72,27 @@ AuthTokenRefresh.has = function(name) {
8172
* been registered.
8273
* @param {String} refreshToken Refresh token to be sent to request
8374
* a new access token.
75+
* @param {Object} params (optional) an object containing additional
76+
* params to use when requesting the token.
8477
* @param {Function} done Callback when all is done.
8578
*/
86-
AuthTokenRefresh.requestNewAccessToken = function(name, refreshToken, done) {
79+
AuthTokenRefresh.requestNewAccessToken = function(name, refreshToken, params, done) {
80+
if(arguments.length === 3) {
81+
done = params;
82+
params = {};
83+
}
84+
8785
// Send a request to refresh an access token, and call the passed
8886
// callback with the result.
8987
var strategy = AuthTokenRefresh._strategies[name];
9088
if(!strategy) {
9189
return done(new Error('Strategy was not registered to refresh a token'));
9290
}
9391

94-
strategy.refreshOAuth2.getOAuthAccessToken(refreshToken, strategy.params, done);
92+
params = params || {};
93+
params.grant_type = 'refresh_token';
94+
95+
strategy.refreshOAuth2.getOAuthAccessToken(refreshToken, params, done);
9596
};
9697

9798
module.exports = AuthTokenRefresh;

test/refresh.spec.js

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

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

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

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

4746
AuthTokenRefresh.use(strategy);
4847

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

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

5958
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,6 +67,7 @@ describe('Auth token refresh', function() {
6767
};
6868

6969
AuthTokenRefresh.use(strategy);
70+
expect(AuthTokenRefresh._strategies.test_strategy.strategy).to.equal(strategy);
7071
expect(AuthTokenRefresh._strategies.test_strategy.refreshOAuth2._accessTokenUrl).to.equal('accessTokenUrl');
7172
});
7273

@@ -80,41 +81,7 @@ describe('Auth token refresh', function() {
8081
AuthTokenRefresh.use(strategy);
8182
expect(AuthTokenRefresh._strategies.test_strategy.refreshOAuth2).to.not.equal(strategyOAuth2);
8283
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-
};
9484

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-
};
112-
113-
AuthTokenRefresh.use(strategy, params);
114-
expect(AuthTokenRefresh._strategies.test_strategy.params).to.eql({
115-
some: 'extra_param',
116-
grant_type: 'refresh_token'
117-
});
11885
});
11986

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

177144
AuthTokenRefresh._strategies = {
178145
test_strategy: {
179-
params: {
180-
grant_type: 'refresh_token'
181-
},
182146
refreshOAuth2: {
183147
getOAuthAccessToken: getOAuthAccessTokenSpy
184148
}
@@ -190,6 +154,23 @@ describe('Auth token refresh', function() {
190154
expect(getOAuthAccessTokenSpy).to.have.been.calledWith('refresh_token', { grant_type: 'refresh_token' }, done);
191155
});
192156

157+
it('should refresh a new access token with extra params', function() {
158+
var getOAuthAccessTokenSpy = sinon.spy();
159+
var done = sinon.spy();
160+
161+
AuthTokenRefresh._strategies = {
162+
test_strategy: {
163+
refreshOAuth2: {
164+
getOAuthAccessToken: getOAuthAccessTokenSpy
165+
}
166+
}
167+
};
168+
169+
AuthTokenRefresh.requestNewAccessToken('test_strategy', 'refresh_token', { some: 'extra_param' }, done);
170+
171+
expect(getOAuthAccessTokenSpy).to.have.been.calledWith('refresh_token', { grant_type: 'refresh_token', some: 'extra_param' }, done);
172+
});
173+
193174
it('should not refresh if the strategy was not previously registered', function() {
194175
var done = sinon.spy();
195176
var expectedErr = new Error('Strategy was not registered to refresh a token');

0 commit comments

Comments
 (0)