diff --git a/.env b/.env index ee32553..079db2f 100644 --- a/.env +++ b/.env @@ -17,4 +17,5 @@ REACT_APP_THEME_API_URL=https://preview.keenthemes.com/theme-api/api REACT_APP_SITE_CONTACT_US=https://www.float.sg/contact REACT_APP_SITE_TERMS=https://www.float.sg/terms -REACT_APP_SITE_ABOUT_US=https://www.float.sg/about \ No newline at end of file +REACT_APP_SITE_ABOUT_US=https://www.float.sg/about +REACT_APP_SESSION_TIMEOUT=300000 \ No newline at end of file diff --git a/src/app/modules/auth/core/Auth.tsx b/src/app/modules/auth/core/Auth.tsx index 77a7ef2..33a2b03 100644 --- a/src/app/modules/auth/core/Auth.tsx +++ b/src/app/modules/auth/core/Auth.tsx @@ -8,6 +8,7 @@ import { Dispatch, SetStateAction, } from 'react' +import {useLocation} from 'react-router-dom' import {LayoutSplashScreen} from '../../../../_res/layout/core' import {AuthModel, UserModel} from './_models' import * as authHelper from './AuthHelpers' @@ -61,11 +62,17 @@ const AuthProvider: FC = ({children}) => { } const AuthInit: FC = ({children}) => { + const pathname = useLocation().pathname const {auth, logout, setCurrentUser} = useAuth() const didRequest = useRef(false) const [showSplashScreen, setShowSplashScreen] = useState(true) // We should request user by authToken (IN OUR EXAMPLE IT'S API_TOKEN) before rendering the application useEffect(() => { + // function to expire session after 5 mins + let logoutSession = setTimeout(()=>{ //expire session after 5 mins + logout() + }, Number(process.env.REACT_APP_SESSION_TIMEOUT)) + const requestUser = async (apiToken: string) => { try { if (!didRequest.current) { @@ -96,7 +103,11 @@ const AuthInit: FC = ({children}) => { setShowSplashScreen(false) } // eslint-disable-next-line - }, []) + + return ()=>{ // clears session timeout side effect + clearInterval(logoutSession) + } + }, [pathname]) return showSplashScreen ? : <>{children} }