This commit is contained in:
Vaica committed 2026-06-22 13:01:37 +08:00
1 parent f99ddec735
commit 8cd35ca127
9 files changed
+263 -45

No files matched your search

+14 -4
View File
@@ -1,5 +1,6 @@
const CACHE = 'v1';
const LOGIN = '/login.html';
const EXPIRE_MS = 3 * 60 * 60 * 1000; // 3小时
self.addEventListener('install', () => self.skipWaiting());
@@ -14,10 +15,15 @@ self.addEventListener('fetch', e => {
e.respondWith((async () => {
const token = self.__auth_token;
if (!token) {
// 尝试从 IndexedDB/localStorage 读取(SW 中无法直接访问 localStorage)
// 依赖客户端页面消息传递 token
return fetch(req);
const tokenTime = self.__auth_time || 0;
if (!token || (Date.now() - tokenTime > EXPIRE_MS)) {
// token 过期或不存在,重定向到登录页
if (token) {
self.__auth_token = null;
self.__auth_time = 0;
}
return Response.redirect(LOGIN, 302);
}
const headers = new Headers(req.headers);
@@ -25,6 +31,8 @@ self.addEventListener('fetch', e => {
const res = await fetch(new Request(req, { headers }));
if (res.status === 401) {
self.__auth_token = null;
self.__auth_time = 0;
return Response.redirect(LOGIN, 302);
}
return res;
@@ -35,8 +43,10 @@ self.addEventListener('fetch', e => {
self.addEventListener('message', e => {
if (e.data && e.data.type === 'SET_TOKEN') {
self.__auth_token = e.data.token;
self.__auth_time = Date.now();
}
if (e.data && e.data.type === 'CLEAR_TOKEN') {
self.__auth_token = null;
self.__auth_time = 0;
}
});