From 1c467bc7bd02c90bd03c1fd2b97165dd9954c40b Mon Sep 17 00:00:00 2001 From: SleepWalker Date: Sun, 26 Feb 2017 11:58:33 +0200 Subject: [PATCH] #303: do not logout if token refresh failed due to 5xx error --- .../user/middlewares/refreshTokenMiddleware.js | 17 ++++++++++------- .../middlewares/refreshTokenMiddleware.test.js | 18 +++++++++++++++++- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/components/user/middlewares/refreshTokenMiddleware.js b/src/components/user/middlewares/refreshTokenMiddleware.js index 426b8cb..bfc6427 100644 --- a/src/components/user/middlewares/refreshTokenMiddleware.js +++ b/src/components/user/middlewares/refreshTokenMiddleware.js @@ -68,16 +68,19 @@ export default function refreshTokenMiddleware({dispatch, getState}) { } function requestAccessToken(refreshToken, dispatch) { - let promise; if (refreshToken) { - promise = authentication.requestToken(refreshToken); - } else { - promise = Promise.reject(); + return authentication.requestToken(refreshToken) + .then(({token}) => dispatch(updateToken(token))) + .catch((resp = {}) => { + if (resp.originalResponse && resp.originalResponse.status >= 500) { + return Promise.reject(resp); + } + + return dispatch(logoutAll()); + }); } - return promise - .then(({token}) => dispatch(updateToken(token))) - .catch(() => dispatch(logoutAll())); + return dispatch(logoutAll()); } diff --git a/tests/components/user/middlewares/refreshTokenMiddleware.test.js b/tests/components/user/middlewares/refreshTokenMiddleware.test.js index bd241b1..2b0cecc 100644 --- a/tests/components/user/middlewares/refreshTokenMiddleware.test.js +++ b/tests/components/user/middlewares/refreshTokenMiddleware.test.js @@ -110,7 +110,7 @@ describe('refreshTokenMiddleware', () => { ); }); - it('should if token can not be parsed', () => { + it('should logout if token can not be parsed', () => { const account = { token: 'realy bad token', refreshToken @@ -143,6 +143,22 @@ describe('refreshTokenMiddleware', () => { ]) ); }); + + it('should not logout if request failed with 5xx', () => { + const resp = { + originalResponse: { + status: 500 + } + }; + + authentication.requestToken.returns(Promise.reject(resp)); + + return expect(middleware.before({url: 'foo', options: {}}), 'to be rejected with', resp).then(() => + expect(dispatch, 'to have no calls satisfying', [ + {payload: {isGuest: true}} + ]) + ); + }); }); it('should not be applied if no token', () => {