Kicker.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <script setup>
  2. import { useUserStore } from '@/stores/user'
  3. const user = useUserStore()
  4. const events = ref(['click', 'mousedown', 'scroll', 'keypress', 'load'])
  5. const logoutTimer = ref(null)
  6. // const elapsed = ref(0)
  7. // const counter = ref(null)
  8. const props = defineProps({
  9. kickAfter: {
  10. type: Number,
  11. required: true
  12. },
  13. })
  14. onMounted(() => {
  15. events.value.forEach(function (event) {
  16. window.addEventListener(event, resetTimer)
  17. }, this)
  18. setTimer()
  19. })
  20. onUnmounted(() => {
  21. events.value.forEach(function (event) {
  22. window.removeEventListener(event, resetTimer)
  23. }, this)
  24. clearTimeout(logoutTimer.value)
  25. // clearInterval(counter.value)
  26. })
  27. function setTimer() {
  28. // elapsed.value = 0
  29. // clearInterval(counter.value)
  30. logoutTimer.value = setTimeout(logoutUser, props.kickAfter * 60 * 1000)
  31. // counter.value = setInterval(() => {
  32. // elapsed.value += 1
  33. // console.log(elapsed.value + '/' + props.kickAfter * 60)
  34. // }, 1000);
  35. }
  36. // Triggers the user logout
  37. function logoutUser() {
  38. clearTimeout(logoutTimer.value)
  39. console.log('inativity detected, user kicked out')
  40. user.logout({ kicked: true})
  41. }
  42. function resetTimer() {
  43. clearTimeout(logoutTimer.value)
  44. setTimer()
  45. }
  46. </script>
  47. <template>
  48. </template>