JavaScript, HTML, CSS e... !
8 commenti

Creazione di un campo password in modo dinamico

Proteggere un Google Form con una password in modo programmatico da Apps Script

Il tema della protezione dei Form Google suscita sempre molto interesse, tuttavia una funzionalità che soddisfi questa esigenza non è offerta (quantomeno ad oggi) dagli strumenti Google, pertanto una volta che il modulo è creato diventa immediatamente di accesso pubblico per impostazione predefinita, ovvero chiunque può accederci purché conosca il suo URL.
Con un account Google Apps l'accesso al file può essere limitato agli utenti del relativo dominio, ma con un account Google comune questo non è possibile.
In tal caso una soluzione può essere quella di creare un Google Form che ha come prima domanda la richiesta di una password per poter proseguire con il contenuto effettivo del modulo. Questo impedirà agli utenti di immettere dati in tale Form se non conoscono la chiave di accesso.

Graficamente quello che intendo è una situazione di questo tipo, Fig. 1:



google form protetto da password

Fig. 1 - Google Form protetto da password


Creando un Form in modo programmatico, come spiegato dettagliatamente nell'articolo 'I vantaggi di creare un Google Form da codice tramite Google Apps Script', possiamo ottenere il risultato di cui sopra utilizzando il seguente codice da lanciare tramite uno script autonomo:

function creaFormConPassword() {

  // Creazione di un Form vuoto
  var form = FormApp.create('Google Form protetto da password');
  formID = form.getId();
  
  // Creo la validazione con un'espressione regolare
  var regexValidation = FormApp.createTextValidation()
  .requireTextMatchesPattern('^www.appsscript.it$')
  .build();
  
  // Inserimento nel form di un campo di testo
  form.addTextItem()
  .setTitle('Inserisci la password per proseguire?')
  .setHelpText('Inserisci la password che ti è stata fornita per accedere al modulo.')
  .setValidation(regexValidation)
  .setRequired(true);
  
  form.addPageBreakItem().setTitle('Benvenuto nel modulo');
  
  // Inserimento nel form di un campo a scelta esclusiva
  form.addMultipleChoiceItem()
  .setTitle('Sei già iscritto al gruppo Facebook "Fatti di Apps Script"?')
  .setHelpText('Se non lo sei ancora il link è il seguente: https://www.facebook.com/groups/AppsScript/')
  .setChoiceValues(['Sì','No']);
  
  // Altre domande del form...
  
}

Come è possibile vedere dalla funzione, oltre la banale creazione del documento aggiungo come primo elemento un campo di testo preceduto dal codice necessario per creare una validazione dei dati tramite un'espressione regolare per verificare la corrispondenza di pattern con la stringa inserita come risposta alla domanda (la password, che nel caso specifico è: www.appsscript.it).
Il metodo utilizzato è:

var regexValidation = FormApp.createTextValidation().requireTextMatchesPattern('pattern_della_password').build();

A questo punto, tale validazione viene associata al campo di testo per la richiesta della password tramite il metodo .setValidation(regexValidation), la risposta viene poi resa obbligatoria con .setRequired(true).

A seguire viene fatto uso del metodo .addPageBreakItem() per fare in modo che il resto delle domande dopo tale comando si trovi in una seconda pagina. In questo modo è possibile lasciare visibile all'utente, accedendo all'URL del Google Form, solo la richiesta della password e non il contenuto dei campi successivi (accessibili solo dopo aver inserito la password corretta).

La parte di codice è a mio avviso il lato più interessante dell'articolo, dato l'argomento monotematico del blog, tuttavia non è necessario passare da Google Apps Script per ottenere il risultato desiderato ma è possibile farlo direttamente dall'interfaccia di Google Form tramite il suo l'editor WYSIWYG, tant'è che nella sezione di edit è facile vedere la proiezione visuale di ciò che il codice di cui sopra ha creato (e che può essere replicato manualmente), Fig. 2:



impostazioni google form per la creazione di un campo password

Fig. 2 -Impostazioni Google Form per la creazione di un campo password


Il rovescio della medaglia è che tale soluzione alternativa, alla mancanza di una vera e propria protezione del documento da un accesso pubblico, non è a prova di bomba... buona parte dell'utenza può essere senz'altro fermata ma un utilizzatore un po' più scaltro con un minimo di conoscenze HTML può trovare in breve tempo la password cercandola nel codice sorgente della pagina, Fig. 3:



password richiesta dalla domanda presente in chiaro nel sorgente della pagina

Fig. 3 - La password richiesta dalla domanda è presente in chiaro nel sorgente della pagina


Questa precisazione è doverosa perché se il vostro Form è realmente confidenziale forse non è il caso di utilizzare questo metodo... e forse non è neanche il caso di utilizzare Google Form.

Tags

Michele Pisani

Michele Pisani

Sviluppatore Javascript ed esperto in Digital Analytics

L'esperienza nel settore Digital Analytics unita ad anni di sviluppo in Javascript ha trovato la massima espressione in Google Apps Script che mi ha permesso, con estrema facilità e poche righe di codice, di realizzare potenti applicazioni interattive e processi automatizzati integrati con i prodotti della G Suite.

Come contattarmi
scrivi un commento

8 Commenti

  1. Friday, May 10, 2019 alle ore 15:02 Carlo

    ciao! ho creato un foglio di lavoro exel, che contiene una specie di gioco, funziona che alcune caselle sono modificabili dal giocatore mentre altre sono "protette" e non modificabili dal giocatore, dopo di che ho scritto uno script effettua il "passaggio di turno" e si attiva al click di un bottone.
    Il mio problema è che se sono presenti delle protezioni il foglio di google non mi fa eseguire lo script in quanto esso stesso non può scrivere all'interno di caselle protette se eseguito da un utente che non ha i permessi.
    ho pensato a due soluzioni possibili ma avrei bisogno di un consiglio e di un aiuto anche a scrivere quest'aggiunta allo script:
    ipotesi 1
    inserisco un comando che permette allo script di ignorare la protezione
    ipotesi 2
    inserisco all'inizio dello script un comando per rimuovere le protezioni e a fine script un comando per rimettere la protezione sul foglio escludendo le caselle con cui il giocatore deve interagire.

    potresti aiutarmi?

    Rispondi a questo commento
  2. Wednesday, September 25, 2019 alle ore 23:23 Luca

    Ciao non ho trovato un modo semplice per proteggere dalla "replica" (stampa, copia incolla, visualizzare codice sorgente). Magari è possibile con uno script?
    Grazie

    Rispondi a questo commento
  3. Sunday, February 9, 2020 alle ore 23:13 RICCARDO

    Ciao, stavo cercando una soluzione al mio problema e spero tu possa essermi di aiuto.
    Devo creare un modulo google al quale avranno accesso vari utenti, servirà per compilare la mensa aziendale settimanale di ogni dipendente, ogniuno dovrà poter compilare solo la sua sezione e non quella di altri quindi l'unico modo penso sia quello di avere una password differente per ogni nome.
    la cosa pensi sia fattibile?

    Avevo trovato un'altra soluzione, quella di creare un modulo per ogni persona con password collegato allo stesso foglio excel, ma essendo in tanti il problema si presenta al momento di cancellare le risposte, va aperto ogni modulo singolarmente e cancellato le risposte, ci vuole un' eternità.

    Spero tu abbia un consiglio o una soluzione.

    Grazie mille

    Rispondi a questo commento
    • Monday, February 10, 2020 alle ore 19:49 Michele PisaniAutore

      Ciao Riccardo,
      i Form di Google non hanno molta elasticità da certi punti di vista e a mio avviso la tua soluzione alternativa è un buon punto di partenza.
      Per evitare di perdere tempo ad aprire ciascun singolo foglio potresti prevedere uno script che va a recuperare per te le varie risposte nei diversi fogli (sulla base di una mappatura su ciascun ID) e le convogli verso un unico Foglio di Google (ad esempio in diverse tab) dal quale con una funzione inversa e un bottone personalizzato puoi avviare uno script che cancella la riga desiderata sul foglio originale. Un po' macchinoso ma sicuramente può essere divertente costruirlo e, se ben fatto, ti fa risparmiare un sacco di tempo.

      Rispondi a questo commento
  4. Thursday, February 13, 2020 alle ore 09:05 RICCARDO

    Ciao Michele, grazie per avermi risposto.
    Siccome i form saranno limitati settimanalmente a una sola risposta, quindi con login tramite account google, i form devono essere azzerati non solo sul foglio excel ma anche sul form stesso e per darlo si deve entrare singolarmente in ogni modulo. Pensi esista un metodo rapido per fare ciò?

    Rispondi a questo commento

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato.I campi contrassegnati da un * sono obbligatori
Puoi utilizzare i seguenti tag nei commenti:
[bold]testo[/bold] se vuoi evidenziare un testo con il grassetto[code]function helloworld() { }[/code] se vuoi pubblicare una porzione di codice[url]https://www.appsscript.it[/url] se devi riferirti ad un indirizzo web