mirror of
https://github.com/elyby/accounts-frontend.git
synced 2024-12-02 11:41:04 +05:30
#303: do not logout user if 5xx during authentication
This commit is contained in:
parent
adfc95d93d
commit
4074a65329
@ -35,13 +35,18 @@ export { updateToken };
|
|||||||
export function authenticate({token, refreshToken}) {
|
export function authenticate({token, refreshToken}) {
|
||||||
return (dispatch, getState) =>
|
return (dispatch, getState) =>
|
||||||
authentication.validateToken({token, refreshToken})
|
authentication.validateToken({token, refreshToken})
|
||||||
.catch((resp) => {
|
.catch((resp = {}) => {
|
||||||
|
if (resp.originalResponse && resp.originalResponse.status >= 500) {
|
||||||
|
// delegate error recovering to the later logic
|
||||||
|
return Promise.reject(resp);
|
||||||
|
}
|
||||||
|
|
||||||
logger.warn('Error validating token during auth', {
|
logger.warn('Error validating token during auth', {
|
||||||
resp
|
resp
|
||||||
});
|
});
|
||||||
|
|
||||||
return dispatch(logoutAll())
|
return dispatch(logoutAll())
|
||||||
.then(() => Promise.reject());
|
.then(() => Promise.reject(resp));
|
||||||
})
|
})
|
||||||
.then(({token, refreshToken, user}) => ({
|
.then(({token, refreshToken, user}) => ({
|
||||||
user: {
|
user: {
|
||||||
|
@ -3,6 +3,7 @@ import sinon from 'sinon';
|
|||||||
|
|
||||||
import { routeActions } from 'react-router-redux';
|
import { routeActions } from 'react-router-redux';
|
||||||
|
|
||||||
|
import logger from 'services/logger';
|
||||||
import authentication from 'services/api/authentication';
|
import authentication from 'services/api/authentication';
|
||||||
import {
|
import {
|
||||||
authenticate,
|
authenticate,
|
||||||
@ -55,6 +56,7 @@ describe('components/accounts/actions', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
sinon.stub(authentication, 'validateToken').named('authentication.validateToken');
|
sinon.stub(authentication, 'validateToken').named('authentication.validateToken');
|
||||||
|
sinon.stub(logger, 'warn').named('logger.warn');
|
||||||
authentication.validateToken.returns(Promise.resolve({
|
authentication.validateToken.returns(Promise.resolve({
|
||||||
token: account.token,
|
token: account.token,
|
||||||
refreshToken: account.refreshToken,
|
refreshToken: account.refreshToken,
|
||||||
@ -64,6 +66,7 @@ describe('components/accounts/actions', () => {
|
|||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
authentication.validateToken.restore();
|
authentication.validateToken.restore();
|
||||||
|
logger.warn.restore();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#authenticate()', () => {
|
describe('#authenticate()', () => {
|
||||||
@ -117,6 +120,9 @@ describe('components/accounts/actions', () => {
|
|||||||
authentication.validateToken.returns(Promise.reject({}));
|
authentication.validateToken.returns(Promise.reject({}));
|
||||||
|
|
||||||
return expect(authenticate(account)(dispatch, getState), 'to be rejected').then(() => {
|
return expect(authenticate(account)(dispatch, getState), 'to be rejected').then(() => {
|
||||||
|
expect(logger.warn, 'to have a call satisfying', [
|
||||||
|
'Error validating token during auth', {}
|
||||||
|
]);
|
||||||
expect(dispatch, 'to have a call satisfying', [
|
expect(dispatch, 'to have a call satisfying', [
|
||||||
{payload: {isGuest: true}},
|
{payload: {isGuest: true}},
|
||||||
]);
|
]);
|
||||||
@ -126,6 +132,22 @@ describe('components/accounts/actions', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('rejects when 5xx without logouting', () => {
|
||||||
|
const resp = {
|
||||||
|
originalResponse: {status: 500}
|
||||||
|
};
|
||||||
|
|
||||||
|
authentication.validateToken.returns(Promise.reject(resp));
|
||||||
|
|
||||||
|
return expect(authenticate(account)(dispatch, getState), 'to be rejected with', resp).then(() => {
|
||||||
|
expect(dispatch, 'to have no calls satisfying', [
|
||||||
|
{payload: {isGuest: true}},
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect(logger.warn, 'was not called');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('marks user as stranger, if there is no refreshToken', () => {
|
it('marks user as stranger, if there is no refreshToken', () => {
|
||||||
const expectedKey = `stranger${account.id}`;
|
const expectedKey = `stranger${account.id}`;
|
||||||
authentication.validateToken.returns(Promise.resolve({
|
authentication.validateToken.returns(Promise.resolve({
|
||||||
|
Loading…
Reference in New Issue
Block a user