@@ -35,7 +35,7 @@ class Backoffice extends Component {
35
35
const response = await axios . post ( '/api/auth/refresh' ) ;
36
36
const token = response . data ;
37
37
38
- await this . setToken ( token ) ;
38
+ this . setToken ( token , true ) ;
39
39
40
40
this . setState ( prevState => {
41
41
return {
@@ -63,7 +63,7 @@ class Backoffice extends Component {
63
63
const token = JSON . parse ( tokenString ) ;
64
64
65
65
if ( token ) {
66
- await this . setToken ( token ) ;
66
+ this . setToken ( token ) ;
67
67
68
68
await this . fetchUser ( ) ;
69
69
}
@@ -173,17 +173,27 @@ class Backoffice extends Component {
173
173
* Store the authentication object as string into a persistent storage.
174
174
*
175
175
* @param {object } token
176
+ * @param {boolean } updateExpiry
176
177
*
177
178
* @return {undefined }
178
179
*/
179
- setToken = token => {
180
+ setToken = ( token , updateExpiry = false ) => {
180
181
// We will set a default Authorization header, this will
181
182
// eliminate the need to include the Authorization header
182
183
// for almost every AJAX requests.
183
184
window . axios . defaults . headers . common [ 'Authorization' ] = `Bearer ${
184
185
token . auth_token
185
186
} `;
186
187
188
+ if ( updateExpiry ) {
189
+ // Add an expired_at timestamp based in the expired_in property in the token.
190
+ // A client defined expiry time makes sense here since a server time is
191
+ // not what we should depend on.
192
+ token . expired_at = moment ( )
193
+ . add ( token . expires_in , 'seconds' )
194
+ . format ( 'YYYY-MM-DD hh:mm:ss' ) ;
195
+ }
196
+
187
197
// Store it locally for the authentication token to persist.
188
198
window . localStorage . setItem ( 'token' , JSON . stringify ( token ) ) ;
189
199
} ;
@@ -269,13 +279,10 @@ class Backoffice extends Component {
269
279
// Treat it as successful response.
270
280
if ( [ 200 , 201 ] . indexOf ( response . status ) > - 1 ) {
271
281
this . setState ( {
282
+ retrying : false ,
272
283
successfulResponse : response ,
273
284
} ) ;
274
285
}
275
-
276
- this . setState ( {
277
- retrying : false ,
278
- } ) ;
279
286
}
280
287
281
288
return Promise . reject ( error ) ;
@@ -296,8 +303,13 @@ class Backoffice extends Component {
296
303
297
304
// Authenticate via Persistent Storage.
298
305
const token = this . token ( ) ;
306
+ let expired = false ;
299
307
300
308
if ( token ) {
309
+ expired = token . expired_at < moment ( ) . format ( 'YYYY-MM-DD hh:mm:ss' ) ;
310
+ }
311
+
312
+ if ( ! expired ) {
301
313
await this . authenticate ( JSON . stringify ( token ) ) ;
302
314
}
303
315
0 commit comments