提交登录修改
This commit is contained in:
@@ -117,6 +117,10 @@
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var JAVA_API_BASE = "{{ java_api_base or '' }}";
|
||||
var AUTH_TOKEN_KEY = 'aiimage_auth_token';
|
||||
var DEVICE_ID_KEY = 'aiimage_device_id';
|
||||
|
||||
function clearAppPermissionCaches() {
|
||||
try {
|
||||
var keysToRemove = [];
|
||||
@@ -132,55 +136,126 @@
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
function waitForPywebview(timeoutMs) {
|
||||
return new Promise(function(resolve) {
|
||||
if (window.pywebview && window.pywebview.api && window.pywebview.api.get_device_id) {
|
||||
resolve(window.pywebview.api);
|
||||
return;
|
||||
}
|
||||
var done = false;
|
||||
var finish = function() {
|
||||
if (done) return;
|
||||
done = true;
|
||||
var api = (window.pywebview && window.pywebview.api) || null;
|
||||
resolve(api);
|
||||
};
|
||||
window.addEventListener('pywebviewready', finish, { once: true });
|
||||
setTimeout(finish, timeoutMs || 1500);
|
||||
});
|
||||
}
|
||||
|
||||
function fetchDeviceId() {
|
||||
return waitForPywebview(2000).then(function(api) {
|
||||
if (!api || typeof api.get_device_id !== 'function') {
|
||||
return '';
|
||||
}
|
||||
try {
|
||||
var ret = api.get_device_id();
|
||||
return Promise.resolve(ret).then(function(res) {
|
||||
if (res && res.success && res.device_id) {
|
||||
try { localStorage.setItem(DEVICE_ID_KEY, res.device_id); } catch (e) {}
|
||||
return res.device_id;
|
||||
}
|
||||
return '';
|
||||
}).catch(function() { return ''; });
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function buildJavaUrl(path) {
|
||||
var base = (JAVA_API_BASE || '').replace(/\/+$/, '');
|
||||
return base + path;
|
||||
}
|
||||
|
||||
(function() {
|
||||
var params = new URLSearchParams(window.location.search || '');
|
||||
if (params.get('logout') === '1' || params.get('switch') === '1') {
|
||||
return;
|
||||
try { localStorage.removeItem(AUTH_TOKEN_KEY); } catch (e) {}
|
||||
}
|
||||
fetch('/api/auth/check', { credentials: 'same-origin' })
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(res) {
|
||||
if (res.logged_in && res.redirect) {
|
||||
window.location.href = res.redirect;
|
||||
}
|
||||
})
|
||||
.catch(function() {});
|
||||
})();
|
||||
|
||||
document.getElementById('loginForm').onsubmit = function(e) {
|
||||
e.preventDefault();
|
||||
var btn = document.getElementById('btnLogin');
|
||||
btn.disabled = true;
|
||||
btn.textContent = '登录中...';
|
||||
var form = e.target;
|
||||
var fd = new FormData(form);
|
||||
fetch(form.action, {
|
||||
method: 'POST',
|
||||
body: fd,
|
||||
headers: { 'X-Requested-With': 'XMLHttpRequest' }
|
||||
})
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(res) {
|
||||
if (res.success) {
|
||||
<<<<<<<< HEAD:backend/web_source/login.html
|
||||
window.location.href = res.redirect || '/admin';
|
||||
========
|
||||
clearAppPermissionCaches();
|
||||
window.location.href = res.redirect || '/home';
|
||||
>>>>>>>> gitee/master:app/web_source/login.html
|
||||
} else {
|
||||
var errEl = document.querySelector('.error-msg');
|
||||
if (!errEl) {
|
||||
errEl = document.createElement('p');
|
||||
errEl.className = 'error-msg';
|
||||
form.insertBefore(errEl, form.firstChild);
|
||||
}
|
||||
errEl.textContent = res.error || '登录失败';
|
||||
btn.disabled = false;
|
||||
btn.textContent = '登录';
|
||||
var username = (form.username.value || '').trim();
|
||||
var password = form.password.value || '';
|
||||
|
||||
function showError(msg) {
|
||||
var errEl = document.querySelector('.error-msg');
|
||||
if (!errEl) {
|
||||
errEl = document.createElement('p');
|
||||
errEl.className = 'error-msg';
|
||||
form.insertBefore(errEl, form.firstChild);
|
||||
}
|
||||
})
|
||||
.catch(function() {
|
||||
form.submit();
|
||||
errEl.textContent = msg || '登录失败';
|
||||
btn.disabled = false;
|
||||
btn.textContent = '登录';
|
||||
}
|
||||
|
||||
fetchDeviceId().then(function(deviceId) {
|
||||
if (!deviceId) {
|
||||
showError('未获取到设备ID,请在桌面端打开');
|
||||
return;
|
||||
}
|
||||
var payload = { username: username, password: password, deviceId: deviceId };
|
||||
return fetch(buildJavaUrl('/login'), {
|
||||
method: 'POST',
|
||||
credentials: 'include',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Device-Id': deviceId,
|
||||
'X-Requested-With': 'XMLHttpRequest'
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
})
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(res) {
|
||||
if (!res || !res.success) {
|
||||
showError((res && res.message) || '登录失败');
|
||||
return;
|
||||
}
|
||||
var data = res.data || {};
|
||||
if (data.token) {
|
||||
try { localStorage.setItem(AUTH_TOKEN_KEY, data.token); } catch (e) {}
|
||||
}
|
||||
// 把 Java 签发的 JWT 同步到 Python 套壳同源 cookie,供后续页面跳转携带
|
||||
return fetch('/api/auth/sync', {
|
||||
method: 'POST',
|
||||
credentials: 'same-origin',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Requested-With': 'XMLHttpRequest'
|
||||
},
|
||||
body: JSON.stringify({ token: data.token })
|
||||
})
|
||||
.then(function(r) { return r.json().catch(function() { return {}; }); })
|
||||
.then(function() {
|
||||
clearAppPermissionCaches();
|
||||
window.location.href = '/home';
|
||||
})
|
||||
.catch(function() {
|
||||
clearAppPermissionCaches();
|
||||
window.location.href = '/home';
|
||||
});
|
||||
})
|
||||
.catch(function() {
|
||||
showError('网络异常,请稍后重试');
|
||||
});
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user