From 64e9056730b6058032bc75873e5794d6c9f9627a Mon Sep 17 00:00:00 2001 From: SleepWalker Date: Wed, 28 Feb 2018 23:58:45 +0200 Subject: [PATCH] #389: do not allow return to profile during re-login (temporary solution) --- src/components/auth/actions.js | 14 +++++++++++++- .../integration/invalid-refreshToken.test.js | 15 +++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/components/auth/actions.js b/src/components/auth/actions.js index 8e030c4..3baa0ab 100644 --- a/src/components/auth/actions.js +++ b/src/components/auth/actions.js @@ -7,6 +7,7 @@ import loader from 'services/loader'; import history from 'services/history'; import { updateUser, acceptRules as userAcceptRules } from 'components/user/actions'; import { authenticate, logoutAll } from 'components/accounts/actions'; +import { getActiveAccount } from 'components/accounts/reducer'; import authentication from 'services/api/authentication'; import oauth from 'services/api/oauth'; import signup from 'services/api/signup'; @@ -436,9 +437,20 @@ export function resetOAuth() { * @return {function} */ export function resetAuth() { - return (dispatch: (Function | Object) => void) => { + return (dispatch: (Function | Object) => void, getSate: () => Object): Promise => { dispatch(setLogin(null)); dispatch(resetOAuth()); + // ensure current account is valid + const activeAccount = getActiveAccount(getSate()); + + if (activeAccount) { + return Promise.resolve(dispatch(authenticate(activeAccount))) + .catch(() => { + // its okay. user will be redirected to an appropriate place + }); + } + + return Promise.resolve(); }; } diff --git a/tests-e2e/cypress/integration/invalid-refreshToken.test.js b/tests-e2e/cypress/integration/invalid-refreshToken.test.js index f2e278f..d83c111 100644 --- a/tests-e2e/cypress/integration/invalid-refreshToken.test.js +++ b/tests-e2e/cypress/integration/invalid-refreshToken.test.js @@ -23,6 +23,21 @@ describe('when user\'s token and refreshToken are invalid', () => { cy.contains('account preferences'); }); + it('should not allow to return to profile using toolbar', () => { + cy.visit('/'); + + cy.url().should('include', '/password'); + + cy + .get('[data-e2e-toolbar] a') + .contains('Ely.by') + .click(); + + // TODO: currently we can not skip redirect to /, but we will in future + cy.location('pathname', { timeout: 15000 }).should('eq', '/'); + cy.url({ timeout: 15000 }).should('include', '/password'); + }); + it('should allow select account', () => { // TODO: need a way to get valid token for one of the accounts cy.visit('/');