@@ -44,7 +44,9 @@ var tokenFns = [
44
44
checkClient ,
45
45
checkUserApproved ,
46
46
generateAccessToken ,
47
+ generateRefreshToken ,
47
48
saveAccessToken ,
49
+ saveRefreshToken ,
48
50
redirect
49
51
] ;
50
52
@@ -197,6 +199,19 @@ function generateAccessToken (done) {
197
199
} ) ;
198
200
}
199
201
202
+ /* Generate refresh token
203
+ *
204
+ * @param {Function } done
205
+ * @this OAuth
206
+ */
207
+ function generateRefreshToken ( done ) {
208
+ var self = this ;
209
+ token ( this , 'refreshToken' , function ( err , token ) {
210
+ self . refreshToken = token ;
211
+ done ( err ) ;
212
+ } ) ;
213
+ }
214
+
200
215
/**
201
216
* Check client against model
202
217
*
@@ -242,6 +257,34 @@ function saveAccessToken (done) {
242
257
} ) ;
243
258
}
244
259
260
+ /**
261
+ * Save refresh token with model
262
+ *
263
+ * @param {Function } done
264
+ * @this OAuth
265
+ */
266
+ function saveRefreshToken ( done ) {
267
+ var refreshToken = this . refreshToken ;
268
+
269
+ // Object idicates a reissue
270
+ if ( typeof refreshToken === 'object' && refreshToken . refreshToken ) {
271
+ this . refreshToken = refreshToken . refreshToken ;
272
+ return done ( ) ;
273
+ }
274
+
275
+ var expires = null ;
276
+ if ( this . config . refreshTokenLifetime !== null ) {
277
+ expires = new Date ( ) ;
278
+ expires . setSeconds ( expires . getSeconds ( ) + this . config . implicitRefreshTokenLifetime ) ;
279
+ }
280
+
281
+ this . model . saveRefreshToken ( refreshToken , this . client . clientId , expires ,
282
+ this . user , function ( err ) {
283
+ if ( err ) return done ( error ( 'server_error' , false , err ) ) ;
284
+ done ( ) ;
285
+ } ) ;
286
+ }
287
+
245
288
/**
246
289
* Check client against model
247
290
*
@@ -255,7 +298,7 @@ function redirect (done) {
255
298
if ( this . responseType === 'code' ) {
256
299
url = this . client . redirectUri + '?code=' + this . authCode ;
257
300
} else {
258
- url = this . client . redirectUri + '?access_token=' + this . accessToken + '&token_type=bearer' ;
301
+ url = this . client . redirectUri + '?access_token=' + this . accessToken + '&refresh_token=' + this . refreshToken + "&expires_in=" + this . config . accessTokenLifetime + '&token_type=bearer' ;
259
302
}
260
303
261
304
if ( typeof this . req . body . state !== 'undefined' ) {
0 commit comments