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 @@
@@ -16,4 +51,5 @@
+
\ 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(() => {})
}