htmlgoogle-apps-scriptweb-applicationscrud

Automatic logout if the tab is closed or every 15 minutes page will logout in app script web page


  1. Is there a formula or function in Google Apps Script that will automatically log out the webpage every 15 minutes?
  2. Is there a formula or function in Google Apps Script that will automatically log out the webpage every time the tab is closed?

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


Solution

  • Add time intervals on your web page

    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>
      
    

    code.gs

    function returnLogin() {
      var sess = getSession();
      sess.loggedIn = false;
      setSession(sess);
      return HtmlService.createTemplateFromFile('Login').evaluate().getContent();
    }
    
    
    

    References