1301
This commit is contained in:
1 parent
f99ddec735
commit
8cd35ca127
9 files changed
+263
-45
No files matched your search
@@ -39,6 +39,26 @@ h1{font-size:20px;color:#1d3d6c;margin-bottom:4px;font-weight:700}
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var EXPIRE_MS = 3 * 60 * 60 * 1000; // 3小时过期
|
||||
|
||||
function getAuth() {
|
||||
try {
|
||||
var raw = localStorage.getItem('wauth');
|
||||
if (!raw) return null;
|
||||
var data = JSON.parse(raw);
|
||||
if (!data.token || !data.time) { localStorage.removeItem('wauth'); return null; }
|
||||
if (Date.now() - data.time > EXPIRE_MS) { localStorage.removeItem('wauth'); return null; }
|
||||
return data.token;
|
||||
} catch(e) {
|
||||
localStorage.removeItem('wauth');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function setAuth(tok) {
|
||||
localStorage.setItem('wauth', JSON.stringify({ token: tok, time: Date.now() }));
|
||||
}
|
||||
|
||||
document.getElementById('form').addEventListener('submit', async function(e) {
|
||||
e.preventDefault();
|
||||
var btn = document.getElementById('btn');
|
||||
@@ -52,22 +72,16 @@ document.getElementById('form').addEventListener('submit', async function(e) {
|
||||
var tok = btoa(u + ':' + p);
|
||||
|
||||
try {
|
||||
// 验证凭据
|
||||
var res = await fetch('/auth/check', {
|
||||
headers: { 'Authorization': 'Basic ' + tok }
|
||||
});
|
||||
|
||||
if (!res.ok) {
|
||||
throw new Error('auth failed');
|
||||
}
|
||||
if (!res.ok) throw new Error('auth failed');
|
||||
|
||||
// 存储凭据
|
||||
localStorage.setItem('wauth', tok);
|
||||
setAuth(tok);
|
||||
|
||||
// 注册 Service Worker
|
||||
if ('serviceWorker' in navigator) {
|
||||
var reg = await navigator.serviceWorker.register('/sw.js');
|
||||
// 等待 SW 激活
|
||||
if (reg.installing) {
|
||||
await new Promise(function(resolve) {
|
||||
reg.installing.addEventListener('statechange', function() {
|
||||
@@ -75,18 +89,13 @@ document.getElementById('form').addEventListener('submit', async function(e) {
|
||||
});
|
||||
});
|
||||
}
|
||||
// 发送 token 给 SW
|
||||
var sw = reg.active || reg.waiting || reg.installing;
|
||||
if (sw) {
|
||||
sw.postMessage({ type: 'SET_TOKEN', token: tok });
|
||||
}
|
||||
// 确保 SW 控制当前页面
|
||||
if (sw) sw.postMessage({ type: 'SET_TOKEN', token: tok });
|
||||
if (navigator.serviceWorker.controller) {
|
||||
navigator.serviceWorker.controller.postMessage({ type: 'SET_TOKEN', token: tok });
|
||||
}
|
||||
}
|
||||
|
||||
// 跳转到主页
|
||||
location.href = '/';
|
||||
} catch (err2) {
|
||||
err.style.display = 'block';
|
||||
@@ -97,7 +106,7 @@ document.getElementById('form').addEventListener('submit', async function(e) {
|
||||
|
||||
// 已登录则验证后跳转
|
||||
(function(){
|
||||
var tok = localStorage.getItem('wauth');
|
||||
var tok = getAuth();
|
||||
if (!tok) return;
|
||||
fetch('/auth/check', { headers: { 'Authorization': 'Basic ' + tok } }).then(function(r) {
|
||||
if (r.ok) {
|
||||
|
||||
Reference in new issue
Block a user