Here is my login and logout code
let MySheets = SpreadsheetApp.getActiveSpreadsheet();
let LoginSheet = MySheets.getSheetByName("Overall");
function doGet(e) {
var output = HtmlService.createTemplateFromFile('Login');
const IMAGEID = "10X-Rh5CwfLb46ITf0iC3ebnILULk7nTc"
var sess = getSession();
if (sess.loggedIn) {
output = HtmlService.createTemplateFromFile('Main');
}
return output.evaluate().setTitle('Database Page')
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
.setFaviconUrl(`https://drive.google.com/uc?id=${IMAGEID}&export=download&format=png`);
}
function myURL() {
return ScriptApp.getService().getUrl();
}
function setSession(session) {
var sId = Session.getTemporaryActiveUserKey();
var uProp = PropertiesService.getUserProperties();
uProp.setProperty(sId, JSON.stringify(session));
}
function getSession() {
var sId = Session.getTemporaryActiveUserKey();
var uProp = PropertiesService.getUserProperties();
var sData = uProp.getProperty(sId);
return sData ? JSON.parse(sData) : { loggedIn: false };
}
function loginUser(pUID, pPassword) {
if (loginCheck(pUID, pPassword)) {
var sess = getSession();
sess.loggedIn = true;
sess.uid = pUID;
setSession(sess);
return 'success';
}
else {
return 'failure';
}
}
function logoutUser() {
var sess = getSession();
sess.loggedIn = false;
setSession(sess);
}
function loginCheck(pUID, pPassword) {
let LoginPass = false;
let ReturnData = LoginSheet.getRange("Af:Af").createTextFinder(pUID).matchEntireCell(true).findAll();
ReturnData.forEach(function (range) {
let StartRow = range.getRow();
let TmpPass = LoginSheet.getRange(StartRow, 33).getValue();
if (TmpPass == pPassword)
{
LoginPass = true;
}
});
return LoginPass;
}
And here is a sheet where you can work from or copy the information.
https://docs.google.com/spreadsheets/d/1ht3xdeLDH8jL4rKKs4SdAxMZk_4eG_e2xrZwWs0eVys/edit?gid=0#gid=0
Is there a formula or function in Google Apps Script that will automatically log out the webpage every 15 minutes?
Yes, you may set a function inside the body of DataTable2.html
and connect a redirect function on code.gs
. right now I set like 20sec so that I can test easily.
Is there a formula or function in Google Apps Script that will automatically log out the webpage every time the tab is closed?
Afaik, it is not possible to automatically logout the webpage once the tab is closed.
Reset timer when the user interacts (set your time preference)
function resetInactivityTimer() {
clearTimeout(inactivityTimer);
inactivityTimer = setTimeout(triggerLogout, 20 * 1000);
}
Logout + load login screen without reloading page
function triggerLogout() {
google.script.run.withSuccessHandler(function(html) {
document.open();
document.write(html);
document.close();
}).logoutAndReturnLogin();
}
Watch for any activity
document.addEventListener('mousemove', resetInactivityTimer);
document.addEventListener('keypress', resetInactivityTimer);
document.addEventListener('click', resetInactivityTimer);
resetInactivityTimer();
Modified Script
DataTable2.html
<script>
let inactivityTimer;
function resetInactivityTimer() {
clearTimeout(inactivityTimer);
inactivityTimer = setTimeout(triggerLogout, 20 * 1000);
}
function triggerLogout() {
google.script.run.withSuccessHandler(function(html) {
document.open();
document.write(html);
document.close();
}).returnLogin();
}
document.addEventListener('mousemove', resetInactivityTimer);
document.addEventListener('keypress', resetInactivityTimer);
document.addEventListener('click', resetInactivityTimer);
resetInactivityTimer();
</script>
function returnLogin() {
var sess = getSession();
sess.loggedIn = false;
setSession(sess);
return HtmlService.createTemplateFromFile('Login').evaluate().getContent();
}
References