From bde05233c5166892a4c0ccbba40c90629c003a81 Mon Sep 17 00:00:00 2001 From: Bubka <858858+Bubka@users.noreply.github.com> Date: Sat, 7 Oct 2023 17:15:41 +0200 Subject: [PATCH] Set up Kicker to log out user when inactivity is detected --- resources/js_vue3/App.vue | 42 ++++++++++++- resources/js_vue3/app.js | 3 +- resources/js_vue3/components/Kicker.vue | 60 +++++++++++++++++++ .../js_vue3/services/httpClientFactory.js | 9 +++ 4 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 resources/js_vue3/components/Kicker.vue diff --git a/resources/js_vue3/App.vue b/resources/js_vue3/App.vue index 6e7942af..9ff16671 100644 --- a/resources/js_vue3/App.vue +++ b/resources/js_vue3/App.vue @@ -1,14 +1,49 @@ \ No newline at end of file diff --git a/resources/js_vue3/app.js b/resources/js_vue3/app.js index faff330c..169b140b 100644 --- a/resources/js_vue3/app.js +++ b/resources/js_vue3/app.js @@ -56,7 +56,7 @@ import FormSelect from '@/components/formElements/FormSelect.vue' import FormToggle from '@/components/formElements/FormToggle.vue' import FormCheckbox from '@/components/formElements/FormCheckbox.vue' import FormButtons from '@/components/formElements/FormButtons.vue' -// import Kicker from './Kicker' +import Kicker from '@/components/Kicker.vue' // import SettingTabs from './SettingTabs' app @@ -73,6 +73,7 @@ app .component('FormToggle', FormToggle) .component('FormCheckbox', FormCheckbox) .component('FormButtons', FormButtons) + .component('Kicker', Kicker) // Global error handling import { useNotifyStore } from '@/stores/notify' diff --git a/resources/js_vue3/components/Kicker.vue b/resources/js_vue3/components/Kicker.vue new file mode 100644 index 00000000..03785ef2 --- /dev/null +++ b/resources/js_vue3/components/Kicker.vue @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/resources/js_vue3/services/httpClientFactory.js b/resources/js_vue3/services/httpClientFactory.js index 1b03df29..831fa811 100644 --- a/resources/js_vue3/services/httpClientFactory.js +++ b/resources/js_vue3/services/httpClientFactory.js @@ -66,6 +66,15 @@ export const httpClientFactory = (endpoint = 'api') => { return Promise.reject(error) } + // api calls are stateless so when user inactivity is detected + // by the backend middleware, it cannot logout the user directly + // so it returns a 418 response. + // We catch the 418 response and push the user to the autolock view + if ( error.response.status === 418 ) { + const user = useUserStore() + user.logout() + } + useNotifyStore().error(error) return new Promise(() => {}) }