Spaces:
Sleeping
Sleeping
David Ko
commited on
Commit
ยท
4ba39ac
1
Parent(s):
cc735d7
Idle auto-logout: add 2-min client-side inactivity timer that redirects to /logout; keep session heartbeat redirect detection
Browse files
api.py
CHANGED
|
@@ -1287,6 +1287,7 @@ def serve_index_html():
|
|
| 1287 |
heartbeat_script = """
|
| 1288 |
<script>
|
| 1289 |
(function(){
|
|
|
|
| 1290 |
function checkSession(){
|
| 1291 |
fetch('/api/status', {credentials: 'include', redirect: 'manual'}).then(function(res){
|
| 1292 |
var redirected = res.redirected || (res.url && res.url.indexOf('/login') !== -1);
|
|
@@ -1298,9 +1299,24 @@ def serve_index_html():
|
|
| 1298 |
window.location.href = '/login';
|
| 1299 |
});
|
| 1300 |
}
|
| 1301 |
-
// ์ฒซ ์ฒดํฌ + ์ฃผ๊ธฐ์ ์ฒดํฌ(30์ด)
|
| 1302 |
checkSession();
|
| 1303 |
setInterval(checkSession, 30000);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1304 |
})();
|
| 1305 |
</script>
|
| 1306 |
"""
|
|
@@ -1352,6 +1368,7 @@ def serve_react(path):
|
|
| 1352 |
heartbeat_script = """
|
| 1353 |
<script>
|
| 1354 |
(function(){
|
|
|
|
| 1355 |
function checkSession(){
|
| 1356 |
fetch('/api/status', {credentials: 'include', redirect: 'manual'}).then(function(res){
|
| 1357 |
var redirected = res.redirected || (res.url && res.url.indexOf('/login') !== -1);
|
|
@@ -1364,6 +1381,21 @@ def serve_react(path):
|
|
| 1364 |
}
|
| 1365 |
checkSession();
|
| 1366 |
setInterval(checkSession, 30000);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1367 |
})();
|
| 1368 |
</script>
|
| 1369 |
"""
|
|
|
|
| 1287 |
heartbeat_script = """
|
| 1288 |
<script>
|
| 1289 |
(function(){
|
| 1290 |
+
// 1) ์ธ์
์ํ ์ฃผ๊ธฐ ์ฒดํฌ (๋ง๋ฃ์ ๋ก๊ทธ์ธ์ผ๋ก)
|
| 1291 |
function checkSession(){
|
| 1292 |
fetch('/api/status', {credentials: 'include', redirect: 'manual'}).then(function(res){
|
| 1293 |
var redirected = res.redirected || (res.url && res.url.indexOf('/login') !== -1);
|
|
|
|
| 1299 |
window.location.href = '/login';
|
| 1300 |
});
|
| 1301 |
}
|
|
|
|
| 1302 |
checkSession();
|
| 1303 |
setInterval(checkSession, 30000);
|
| 1304 |
+
|
| 1305 |
+
// 2) ์ฌ์ฉ์ ๋นํ์ฑ(๋ฌด๋์) 2๋ถ ํ ์๋ ๋ก๊ทธ์์
|
| 1306 |
+
var idleMs = 120000; // 2๋ถ
|
| 1307 |
+
var idleTimer;
|
| 1308 |
+
function triggerLogout(){
|
| 1309 |
+
// ์๋ฒ ์ธ์
์ ๋ฆฌ ํ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก
|
| 1310 |
+
window.location.href = '/logout';
|
| 1311 |
+
}
|
| 1312 |
+
function resetIdle(){
|
| 1313 |
+
if (idleTimer) clearTimeout(idleTimer);
|
| 1314 |
+
idleTimer = setTimeout(triggerLogout, idleMs);
|
| 1315 |
+
}
|
| 1316 |
+
['click','mousemove','keydown','scroll','touchstart','visibilitychange'].forEach(function(evt){
|
| 1317 |
+
window.addEventListener(evt, resetIdle, {passive:true});
|
| 1318 |
+
});
|
| 1319 |
+
resetIdle();
|
| 1320 |
})();
|
| 1321 |
</script>
|
| 1322 |
"""
|
|
|
|
| 1368 |
heartbeat_script = """
|
| 1369 |
<script>
|
| 1370 |
(function(){
|
| 1371 |
+
// 1) ์ธ์
์ํ ์ฃผ๊ธฐ ์ฒดํฌ (๋ง๋ฃ์ ๋ก๊ทธ์ธ์ผ๋ก)
|
| 1372 |
function checkSession(){
|
| 1373 |
fetch('/api/status', {credentials: 'include', redirect: 'manual'}).then(function(res){
|
| 1374 |
var redirected = res.redirected || (res.url && res.url.indexOf('/login') !== -1);
|
|
|
|
| 1381 |
}
|
| 1382 |
checkSession();
|
| 1383 |
setInterval(checkSession, 30000);
|
| 1384 |
+
|
| 1385 |
+
// 2) ์ฌ์ฉ์ ๋นํ์ฑ(๋ฌด๋์) 2๋ถ ํ ์๋ ๋ก๊ทธ์์
|
| 1386 |
+
var idleMs = 120000; // 2๋ถ
|
| 1387 |
+
var idleTimer;
|
| 1388 |
+
function triggerLogout(){
|
| 1389 |
+
window.location.href = '/logout';
|
| 1390 |
+
}
|
| 1391 |
+
function resetIdle(){
|
| 1392 |
+
if (idleTimer) clearTimeout(idleTimer);
|
| 1393 |
+
idleTimer = setTimeout(triggerLogout, idleMs);
|
| 1394 |
+
}
|
| 1395 |
+
['click','mousemove','keydown','scroll','touchstart','visibilitychange'].forEach(function(evt){
|
| 1396 |
+
window.addEventListener(evt, resetIdle, {passive:true});
|
| 1397 |
+
});
|
| 1398 |
+
resetIdle();
|
| 1399 |
})();
|
| 1400 |
</script>
|
| 1401 |
"""
|