diff --git a/frontend/app/components/Login/Login.js b/frontend/app/components/Login/Login.js
index 70ee0f74e..06a2a8dd7 100644
--- a/frontend/app/components/Login/Login.js
+++ b/frontend/app/components/Login/Login.js
@@ -122,15 +122,15 @@ export default class Login extends React.Component {
- { errors &&
-
+ { errors.length ?
+ (
{ errors.map(error => (
{ error }
)) }
-
+
) : null
}
{/* */}
diff --git a/frontend/app/duck/user.js b/frontend/app/duck/user.js
index f28fb7ed0..5814f082c 100644
--- a/frontend/app/duck/user.js
+++ b/frontend/app/duck/user.js
@@ -28,7 +28,11 @@ export const initialState = Map({
authDetails: {},
onboarding: false,
sites: List(),
- jwt: null
+ jwt: null,
+ loginRequest: {
+ loading: false,
+ errors: []
+ },
});
const setClient = (state, data) => {
@@ -50,10 +54,12 @@ const reducer = (state = initialState, action = {}) => {
switch (action.type) {
case UPDATE_JWT:
return state.set('jwt', action.data);
+ case LOGIN.REQUEST:
+ return state.set('loginRequest', { loading: true, errors: [] })
case RESET_PASSWORD.SUCCESS:
case UPDATE_PASSWORD.SUCCESS:
case LOGIN.SUCCESS:
- state.set('account', Account({...action.data.user }))
+ state.set('account', Account({...action.data.user })).set('loginRequest', { loading: false, errors: [] })
case SIGNUP.SUCCESS:
state.set('account', Account(action.data.user)).set('onboarding', true);
case REQUEST_RESET_PASSWORD.SUCCESS:
@@ -67,6 +73,8 @@ const reducer = (state = initialState, action = {}) => {
return state.set('passwordErrors', List(action.errors))
case FETCH_ACCOUNT.FAILURE:
case LOGIN.FAILURE:
+ deleteCookie('jwt', '/', 'openreplay.com')
+ return state.set('loginRequest', { loading: false, errors: ['Invalid username or password'] });
case DELETE.SUCCESS:
case DELETE.FAILURE:
deleteCookie('jwt', '/', 'openreplay.com')
@@ -86,7 +94,6 @@ const reducer = (state = initialState, action = {}) => {
export default withRequestState({
- loginRequest: LOGIN,
signupRequest: SIGNUP,
updatePasswordRequest: UPDATE_PASSWORD,
requestResetPassowrd: REQUEST_RESET_PASSWORD,
@@ -96,7 +103,7 @@ export default withRequestState({
updateAccountRequest: UPDATE_ACCOUNT,
}, reducer);
-export const login = params => dispatch => dispatch({
+export const login = params => ({
types: LOGIN.toArray(),
call: client => client.post('/login', params),
});