added User Context

This commit is contained in:
Sean Macfarlane
2020-05-08 14:08:44 -04:00
parent 20047113bb
commit 5f3ab23ee1
4 changed files with 44 additions and 11 deletions

View File

@@ -2,27 +2,39 @@ import React from 'react';
import T from 'prop-types';
import { Route, Redirect } from 'react-router-dom';
import UserProvider from 'contexts/UserProvider';
import MasterLayout from 'containers/MasterLayout';
import { AUTH_TOKEN } from 'constants/index';
import { getItem } from 'utils/localStorage';
import { parseJwt } from 'utils/jwt';
const ProtectedRouteWithLayout = ({ component: Component, ...rest }) => (
<Route
{...rest}
render={props =>
getItem(AUTH_TOKEN) ? (
<MasterLayout>
<Component {...props} />
</MasterLayout>
) : (
render={props => {
const token = getItem(AUTH_TOKEN);
if (token) {
const jwt = parseJwt(token.access_token);
return (
<UserProvider email={jwt.userName} role={jwt.userRole} customerId={jwt.customerId}>
<MasterLayout>
<Component {...props} />
</MasterLayout>
</UserProvider>
);
}
return (
<Redirect
to={{
pathname: '/login',
}}
/>
)
}
);
}}
/>
);

View File

@@ -0,0 +1,5 @@
import React from 'react';
const UserContext = React.createContext();
export default UserContext;

View File

@@ -0,0 +1,17 @@
import React from 'react';
import PropTypes from 'prop-types';
import UserContext from 'contexts/UserContext';
const UserProvider = ({ children, email, role, customerId }) => (
<UserContext.Provider value={{ email, role, customerId }}>{children}</UserContext.Provider>
);
UserProvider.propTypes = {
children: PropTypes.node.isRequired,
email: PropTypes.string.isRequired,
role: PropTypes.string.isRequired,
customerId: PropTypes.number.isRequired,
};
export default UserProvider;

View File

@@ -1,7 +1,6 @@
export function parseJwt(token) {
const base64Url = token.split('.')[1];
const base64 = base64Url.replace('-', '+').replace('_', '/');
return JSON.parse(window.atob(base64));
const base64Url = token.split('.')[0];
return JSON.parse(window.atob(base64Url));
}
export function isTokenExpired(token) {