Add login dynamic and auth file

This commit is contained in:
cyril lopez 2017-11-14 14:27:16 +01:00
parent d9e3d80a22
commit 04689919ab
5 changed files with 139 additions and 8 deletions

View File

@ -0,0 +1,104 @@
import { isEmpty } from 'lodash';
const TOKEN_KEY = 'jwtToken';
const USER_INFO = 'userInfo';
const parse = JSON.parse;
const stringify = JSON.stringify;
const auth = {
clearAppStorage() {
if (localStorage) {
return localStorage.clear();
}
if (sessionStorage) {
return sessionStorage.clear();
}
return null;
},
clearToken(tokenKey = TOKEN_KEY) {
if (localStorage) {
return localStorage.removeItem(tokenKey);
}
if (sessionStorage) {
return sessionStorage.removeItem(tokenKey);
}
return null;
},
clearUserInfo(userInfo = USER_INFO) {
if (localStorage) {
return localStorage.removeItem(userInfo);
}
if (sessionStorage) {
return sessionStorage.removeItem(userInfo);
}
return null;
},
getToken(tokenKey = TOKEN_KEY) {
if (localStorage && localStorage.getItem(tokenKey)) {
return parse(localStorage.getItem(tokenKey)) || null;
}
if (sessionStorage && sessionStorage.getItem(tokenKey)) {
return parse(sessionStorage.getItem(tokenKey)) || null;
}
return null;
},
getUserInfo(userInfo = USER_INFO) {
if (localStorage && localStorage.getItem(userInfo)) {
return parse(localStorage.getItem(userInfo)) || null;
}
if (sessionStorage && sessionStorage.getItem(userInfo)) {
return parse(sessionStorage.getItem(userInfo)) || null;
}
return null;
},
setToken(value = '', isLocalStorage = false, tokenKey = TOKEN_KEY) {
if (isEmpty(value)) {
return null;
}
if (isLocalStorage && localStorage) {
console.log('ok')
return localStorage.setItem(tokenKey, stringify(value));
}
if (sessionStorage && sessionStorage) {
return sessionStorage.setItem(tokenKey, stringify(value));
}
return null;
},
setUserInfo(value = '', isLocalStorage = false, userInfo = USER_INFO) {
if (isEmpty(value)) {
return null;
}
if (isLocalStorage && localStorage) {
return localStorage.setItem(userInfo, stringify(value));
}
if (sessionStorage) {
return sessionStorage.setItem(userInfo, stringify(value));
}
return null;
},
}
export default auth;

View File

@ -66,6 +66,7 @@ export function setForm(formType, email) {
return {
type: SET_FORM,
data,
formType,
};
}

View File

@ -15,6 +15,7 @@ import {
const initialState = fromJS({
didCheckErrors: false,
formErrors: List([]),
formType: 'login',
modifiedData: Map({}),
submitSuccess: false,
});
@ -31,6 +32,7 @@ function authPageReducer(state = initialState, action) {
case SET_FORM:
return state
.set('formErrors', List([]))
.set('formType', action.formType)
.set('submitSuccess', false)
.set('modifiedData', Map(action.data));
case SUBMIT_SUCCEEDED:

View File

@ -1,13 +1,26 @@
import { fork, takeLatest, put } from 'redux-saga/effects';
import { call, fork, takeLatest, put, select } from 'redux-saga/effects';
import auth from 'utils/auth';
import request from 'utils/request';
import { makeSelectFormType, makeSelectModifiedData } from './selectors';
import { submitSucceeded } from './actions';
import { SUBMIT } from './constants';
export function* submitForm() {
try {
// TODO dynamic
yield put(submitSucceeded());
const formType = yield select(makeSelectFormType());
const body = yield select(makeSelectModifiedData());
if (formType === 'login') {
const response = yield call(request, '/auth/local', { method: 'POST', body });
if (response.jwt) {
yield call(auth.setToken, response.jwt, body.rememberMe);
yield call(auth.setUserInfo, response.user, body.rememberMe);
}
}
yield put(submitSucceeded());
} catch(error) {
window.Strapi.notification.error('An error occured');
}

View File

@ -5,11 +5,6 @@ import { createSelector } from 'reselect';
*/
const selectAuthPageDomain = () => (state) => state.get('authPage');
/**
* Other specific selectors
*/
/**
* Default selector used by AuthPage
*/
@ -19,7 +14,23 @@ const makeSelectAuthPage = () => createSelector(
(substate) => substate.toJS()
);
/**
* Other specific selectors
*/
const makeSelectFormType = () => createSelector(
selectAuthPageDomain(),
(substate) => substate.get('formType'),
);
const makeSelectModifiedData = () => createSelector(
selectAuthPageDomain(),
(substate) => substate.get('modifiedData').toJS(),
);
export default makeSelectAuthPage;
export {
makeSelectFormType,
makeSelectModifiedData,
selectAuthPageDomain,
};