mirror of
https://github.com/Cccc-owo/CheckInApp.git
synced 2026-06-17 14:06:28 +00:00
frontend: prevent starting token monitor more than once
This commit is contained in:
@@ -11,10 +11,14 @@ import { useRouter } from 'vue-router'
|
|||||||
* 1. 定时检查 Token 状态
|
* 1. 定时检查 Token 状态
|
||||||
* 2. Token 过期后 5 分钟内提醒用户
|
* 2. Token 过期后 5 分钟内提醒用户
|
||||||
* 3. 为有密码的用户提供友好的过期处理
|
* 3. 为有密码的用户提供友好的过期处理
|
||||||
|
*
|
||||||
|
* 注意:使用单例模式,确保全局只有一个监控实例
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// 全局单例:确保整个应用只有一个监控实例
|
||||||
let monitorTimer = null
|
let monitorTimer = null
|
||||||
let warningShown = false
|
let warningShown = false
|
||||||
|
let isMonitoring = false // 新增:防止重复启动
|
||||||
|
|
||||||
export function useTokenMonitor() {
|
export function useTokenMonitor() {
|
||||||
const authStore = useAuthStore()
|
const authStore = useAuthStore()
|
||||||
@@ -109,11 +113,13 @@ export function useTokenMonitor() {
|
|||||||
|
|
||||||
// 启动监控
|
// 启动监控
|
||||||
const startMonitoring = () => {
|
const startMonitoring = () => {
|
||||||
// 避免重复启动
|
// 避免重复启动(单例模式)
|
||||||
if (monitorTimer) {
|
if (isMonitoring || monitorTimer) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isMonitoring = true
|
||||||
|
|
||||||
// 立即检查一次
|
// 立即检查一次
|
||||||
checkTokenStatus()
|
checkTokenStatus()
|
||||||
|
|
||||||
@@ -129,6 +135,7 @@ export function useTokenMonitor() {
|
|||||||
clearInterval(monitorTimer)
|
clearInterval(monitorTimer)
|
||||||
monitorTimer = null
|
monitorTimer = null
|
||||||
}
|
}
|
||||||
|
isMonitoring = false
|
||||||
warningShown = false
|
warningShown = false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,10 +152,8 @@ export function useTokenMonitor() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// 组件卸载时停止监控
|
// 组件卸载时不停止监控(因为是全局单例)
|
||||||
onUnmounted(() => {
|
// onUnmounted 中不调用 stopMonitoring(),让监控持续运行
|
||||||
stopMonitoring()
|
|
||||||
})
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
tokenStatus,
|
tokenStatus,
|
||||||
|
|||||||
Reference in New Issue
Block a user