Attività purtroppo frequente e che richiede molto tempo, la reimpostazione della password degli studenti che l’hanno dimenticata non può essere delegata al singolo utente su G Suite for Education. I termini di servizio stabiliscono che nessun utente minorenne può accedere al recupero autonomo della password. Per di più, questo è impedito in maniera predefinita anche agli adulti – docenti o personale – di un dominio G Suite che non sia dichiarato di istruzione superiore. Che equivale per noi non alle scuole ‘superiori’, la secondaria di secondo grado, bensì all’Università: dove non essendoci utenti minorenni, il problema non si pone.

Una delle opzioni per diminuire il carico di lavoro dell’admin è abilitare alcuni colleghi come amministratori con ruolo definito. Dalle impostazioni della Console si possono aggiungere amministratori che non sono superadmin – quindi non possono modificare qualunque impostazione sulla Console – ma che si dedicano solamente al reset password. Non illustriamo qui questa procedura: è utile, ma in certe situazioni non aiuta. Promuovere altre persone ad amministratori – anche se con ruolo limitato – implica formazione e un certo grado di responsabilità. Dove questo è possibile, la soluzione del ruolo amministrativo di settore è semplice e raggiunge lo scopo.

Come funziona

La procedura qui descritta è utile per le situazioni in cui promuovere altre persone ad amministratore limitato non è la strada migliore. Il funzionamento finale del sistema qui proposto è semplice:

  • lo studente – o la famiglia – si rivolge a uno degli insegnanti di classe in caso di smarrimento della password
  • l’insegnante compila un modulo Google per la reimpostazione della password dello studente, e riceve una mail con la password provvisoria
  • l’insegnante comunica la password ricevuta allo studente o alla famiglia, con il mezzo più comodo
  • al primo accesso lo studente cambia la password provvisoria con una scelta da lui

Tutto questo avviene senza assegnare ruoli amministrativi all’insegnante. È sufficiente compilare un modulo Google inserendo l’indirizzo email dello studente, e uno script allegato pensa a tutta la procedura in automatico. Dopo pochi istanti l’insegnante riceve sul proprio indirizzo email G Suite una mail con la password provvisoria (creata dalla procedura di reimpostazione) da comunicare agli studenti.

Lo script esegue diverse verifiche durante le varie fasi della procedura. In caso vengano riscontrati errori, il richiedente riceve una mail di notifica con un’indicazione dell’errore – se possibile – e dell’indirizzo email di assistenza da contattare. Per alcuni tipi di errore anche l’admin riceve un’email di notifica.

Sicurezza

Alcuni aspetti fondamentali da tenere presenti riguardano la sicurezza di questa procedura, e il rispetto dei termini di servizio e la normativa vigente. Parte di tutto ciò è garantito dalla configurazione del modulo e dello script, che per essere funzionanti ed efficaci dovranno essere adattati alla situazione di ogni Istituto, come descritto più sotto. Un’altra parte altrettanto fondamentale è garantita invece dalla configurazione specifica che l’admin darà alla procedura, dalla scelta di chi può utilizzarla e dal comportamento di ogni insegnante che utilizza i dati del modulo e li diffonde. Raccomando quindi di non prendere ed applicare questo modulo così come fornito, ma di riflettere attentamente sulla sua implementazione alla luce delle considerazioni qui di seguito.

Chi può reimpostare la password?

Il modulo può essere utilizzato solo con l’account G Suite di Istituto, e solo da alcune categorie di utenti. Nel mio Istituto sono tutti gli insegnanti, anche se questa scelta può essere cambiata. L’admin deve modificare lo script – vedi sotto per le modalità – in modo da impostare l’unità organizzativa autorizzata all’utilizzo del modulo. Prima di elaborare la richiesta, lo script controlla l’account utilizzato per compilare il modulo. Se l’account fa parte dell’organizzazione autorizzata, la procedura prosegue, altrimenti non viene completata. Si può scegliere di autorizzare un limitato numero di insegnanti, o altra categoria, creando una sotto-unità organizzativa in cui inserire gli autorizzati.

A chi può essere reimpostata la password?

Specularmente, la reimpostazione della password con questo modulo può essere applicata solo ad alcune categorie di utenti, in questo caso gli studenti. Anche questa impostazione è gestita con le unità organizzative. Lo script verifica l’indirizzo email di cui l’insegnante richiede il reset password. Se appartiene all’organizzazione impostata dall’admin la procedura si conclude, altrimenti si interrompe.

Mentre infatti vogliamo semplificare la reimpostazione della password per gli studenti, dobbiamo proteggere con ulteriori accorgimenti il reset password per tutti gli altri account. Docenti e account amministrativi, in particolare, hanno privilegi elevati e contengono dati delicati. Poter reimpostare la password di questi account semplicemente inserendo il loro indirizzo email in un modulo – senza ulteriori verifiche – non è certo raccomandato. Consiglio quindi di non modificare lo script per fargli reimpostare la password di tutti gli utenti che non siano studenti: anche se tecnicamente possibile, aprirebbe una falla nella sicurezza molto importante.

File e script

La procedura lavora con due file – un modulo e il foglio di lavoro con le relative risposte – e uno script annesso al foglio di lavoro. Per utilizzarla nel tuo dominio è sufficiente copiare il foglio di lavoro che trovi a questo link: https://docs.google.com/spreadsheets/d/1Y3TexpGEV7emhqkE16KioYImmQde_yq6Jbd_BXgzl_s/edit?usp=sharing

Il file si apre in sola visualizzazione: dal menu File scegli Crea una copia, quindi seleziona una cartella del tuo Drive in cui copiare il file. Consiglio di creare una cartella dedicata a questa procedura. Automaticamente verrà creato nella cartella radice Il mio Drive anche il Modulo da utilizzare per la reimpostazione della password – non devi né crearlo né copiarlo. Sposta il modulo da Il mio Drive alla cartella dedicata che hai creato per il foglio di lavoro. È importante non rinominare i file a questo punto: verranno rinominati automaticamente nel modo corretto seguendo le indicazioni sottostanti.

Effettua le modifiche per il tuo dominio

  1. Apri ora il foglio di lavoro – non il modulo – e attendi qualche secondo finché comparirà in alto, a fianco del menu Guida, la voce Funzioni utente. Cliccala, quindi scegli la voce 1 – Concedi autorizzazioni. Comparirà una schermata in cui scegliere l’account o inserire le credenziali (scegli o inserisci i dati del tuo account G Suite da amministratore), quindi accetta le richieste di autorizzazione. Clicca di nuovo il menu Funzioni utente, e scegli la voce 2 – Imposta primo avvio. Nel giro di pochi istanti sia il foglio di lavoro che il modulo verranno rinominati con il nome file definitivo. D’ora in avanti puoi spostare i due file, ma non rinominarli più (a meno di mettere mano allo script per personalizzarlo e cambiare alcune funzioni).
  2. A questo punto dal foglio di lavoro clicca sul menu Strumenti, quindi Editor di script. Sotto il commento // variabili da modificare con i dati dell’Istituto (dovrebbe trovarsi alla riga 11) trovi 3 righe da modificare con i valori adatti alla situazione del tuo Istituto:
    • le variabili uoDocenti e uoAlunni identificano rispettivamente l’unità organizzativa di chi è autorizzato ad utilizzare lo script (normalmente gli insegnanti) e quella degli account di cui è permesso reimpostare la password con questo script (normalmente gli alunni). Sostituisci i valori /Docenti e /Alunni con i percorsi delle rispettive unità organizzative, così come sono organizzate nel tuo dominio
    • la variabile emailAdmin identifica invece l’indirizzo email a cui rivolgersi in caso di problemi; potrebbe essere l’email dell’amministratore, oppure un indirizzo di servizio dedicato. In ogni caso, inseriscilo al posto della dicitura generica che trovi su questa riga
    • ricordati di salvare prima di chiudere la scheda; quindi chiudi anche il foglio di lavoro
  3. Apri ora il modulo, dove dovrai modificare solo un dettaglio. L’unica domanda presente contiene una convalida della risposta. Alla riga Testo > Contiene sostituisci la dicitura generica @miodominiogsuite.it con il tuo dominio reale (ricordati di premettere la @). In questo modo il modulo accetterà richieste solo per la reimpostazione della password di account del dominio – la verifica che siano effettivamente studenti viene effettuata non qui nel modulo, ma dallo script dietro le quinte.

Ora tutto è pronto per l’uso. Fai qualche prova per verificare che tutto si comporti come desiderato prima di distribuire il link del modulo alle persone che lo dovranno utilizzare.

Lo script

Copiando il modulo – come indicato sopra – viene già copiato anche lo script. Non devi fare altro che apportare quelle 3 modifiche indicate qui sopra. Per poter vedere struttura e funzionamento dello script, lo riporto comunque qui sotto.

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Funzioni utente')
  .addItem('1 - Concedi autorizzazioni', 'concediAutorizzazioni')
  .addItem('2 - Imposta primo avvio', 'impostaPrimoAvvio')
  .addToUi()
}
function reimpostaPassword(e) {
  
  // variabili da modificare con i dati dell'Istituto
  var uoDocenti = '/Docenti';
  var uoAlunni = '/Alunni';
  var emailAdmin = 'inserireEmailAdmin';
  
  // dati delle risposte al modulo
  var timestamp = e.values[0];
  var richiedente = e.values[1];
  var accountReimpostazione = e.values[2].trim();
  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var foglioRisposte1 = ss.getSheetByName('Risposte del modulo 1');
  var cellaEsito = foglioRisposte1.getRange(foglioRisposte1.getLastRow(), 4);
  var urlModulo = FormApp.openById((DriveApp.getFileById(ss.getId()).getParents().next().getFilesByName('Reimposta password studente').next().getId())).getPublishedUrl();
  
  // controlla se il richiedente è autorizzato
  var utenteAutorizzato = verificaOrganizzazioneUtente(richiedente, uoDocenti);
  if (!utenteAutorizzato) {
    let oggetto = 'Operazione non autorizzata';
    let messaggio = `<p>Hai chiesto di reimpostare la password per l'account ${accountReimpostazione}, ma non sei 
    autorizzato a farlo.<br />Solo i docenti possono utilizzare il modulo dedicato.</p>
    <p>Se sei un docente e ritieni di ricevere questa email 
    per errore, segnala il problema all'amministratore di G Suite:<br />${emailAdmin}</p>`;
    let esito = 'richiedente non autorizzato';
    
    inviaEmail(richiedente, oggetto, messaggio);
    cellaEsito.setValue(esito);
    
    return;
  
  } else {
    var insegnante = richiedente;
  }
  
  
  //controlla che l'accountReimpostazione esista
  
  try {
    var esistente = AdminDirectory.Users.get(accountReimpostazione);
  }
  catch (e) {
    let oggetto = 'Operazione non autorizzata';
    let messaggio = `<p>Hai chiesto di reimpostare la password per l'account ${accountReimpostazione}, ma l'account risulta inesistente.<br />
      Prova a compilare nuovamente il <a href=${urlModulo}>modulo</a>, verificando di inserire correttamente l'indirizzo email dell'alunno.</p>
    <p>Se ritieni che questo sia un errore, segnala il problema all'amministratore di G Suite:<br />${emailAdmin}</p>`;
    let esito = 'reimpostazione non autorizzata - account inesistente';
    
    inviaEmail(richiedente, oggetto, messaggio);
    cellaEsito.setValue(esito);
    
    return;
  }
  
  
  // controlla che l'accountReimpostazione sia uno studente
  var reimpostazioneValida = verificaOrganizzazioneUtente(accountReimpostazione, uoAlunni);
  if (!reimpostazioneValida) {
    let oggetto = 'Operazione non autorizzata';
    let messaggio = `<p>Hai chiesto di reimpostare la password per l'account ${accountReimpostazione}, ma non risulta essere l'account di un alunno.<br />
    Il modulo può essere utilizzato solo per reimpostare la password degli alunni.</p>
    <p>Se ritieni che questo sia un errore, segnala il problema all'amministratore di G Suite:<br />${emailAdmin}</p>`;
    let esito = 'reimpostazione non autorizzata - non è studente';
    
    inviaEmail(richiedente, oggetto, messaggio);
    cellaEsito.setValue(esito);
    
    return;
    
  } else {
    var studente = accountReimpostazione;
  }
  
  
  // ----- se tutto ok, procede alla reimpostazione della password
  
  // genera la nuova password
  var password = ''; 
  var caratteriPassword = "123456789ABCDEFGHIJKLMNPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; 
  for (var j = 0; j < 8; j++) { 
    var posizioneCasuale = Math.floor(Math.random() * caratteriPassword.length); 
    password += caratteriPassword.substring(posizioneCasuale, posizioneCasuale + 1); 
  }
    
  // reimposta la password dell'utente
  var user = AdminDirectory.Users.get(studente); 
  user.password = password; 
  user.changePasswordAtNextLogin = true;
  AdminDirectory.Users.update(user, studente);
  
  // invia email con la nuova password provvisoria 
  let oggetto = `Reimpostazione della password per l'account ${studente} effettuata correttamente`;
  let messaggio = `<p>Hai richiesto la reimpostazione della password per l'account ${studente}. L'operazione è andata a buon fine.</p>
  <p>La password provvisoria è questa:<br />${password}</p>
  <p>Puoi inviare questa password allo studente o alla famiglia. Utilizzerà questa password per il prossimo accesso, poi dovrà cambiarla con una personalizzata.</p>
  <p>Ricorda di consegnare la password direttamente allo studente o a un genitore. Non va consegnata ad altri familiari o richiedenti.</p>`;
  let esito = `password reimpostata correttamente`;
  
  inviaEmail(insegnante, oggetto, messaggio);
  cellaEsito.setValue(esito);
  
  
}
// ----- funzioni ausiliarie
function verificaOrganizzazioneUtente(account, uo) {
  // controlla se appartiene ad un'unità organizzativa elencata nel foglio apposito, o ad una loro sotto-unità organizzativa
  var organizzazioneUtente = AdminDirectory.Users.get(account).orgUnitPath;
  // indexOf anzichè semplice includes, per testare se appartiene a sotto-unità organizzativa di una unità organizzativa presente nella lista
  return (organizzazioneUtente.indexOf(uo) > -1);
}
function inviaEmail(email, oggetto, messaggio) {
  GmailApp.sendEmail(email, oggetto, messaggio, {htmlBody: messaggio});
}
function concediAutorizzazioni() {
  
}
function impostaPrimoAvvio() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var props = PropertiesService.getScriptProperties();
  verificaTrigger(props);
  var impostazioniOk = props.getProperty('impostazioniOk');
  if (!impostazioniOk) {
    DriveApp.getFileById(ss.getId()).getParents().next().getFilesByName('Copia di Reimposta password studente').next().setName('Reimposta password studente');
    DriveApp.getFileById(ss.getId()).getParents().next().getFilesByName('Copia di Reimposta password studente (Risposte)').next().setName('Reimposta password studente (Risposte)');
    props.setProperty('impostazioniOk', true);
  }
}
// ----- verifica esistenza trigger, altrimenti lo crea
function verificaTrigger(props) {
  
  // cerca se già impostato trigger per funzione principale, altrimenti lo crea e memorizza creazione avvenuta in una proprietà
  if (props.getProperty('triggerPresente')) {
    return;  
  }
      
  var triggers = ScriptApp.getProjectTriggers();
  if (triggers.length > 0) {
    for (i = 0; i < triggers.length; i ++) {
      if (triggers[i].getHandlerFunction() == 'reimpostaPassword') {
        props.setProperty('triggerPresente', true);
      }
    }
  }
  
  if (triggers.length == 0 || !(props.getProperty('triggerPresente'))) {
    ScriptApp.newTrigger('reimpostaPassword')
      .forSpreadsheet(SpreadsheetApp.getActive())
      .onFormSubmit()
      .create();
      props.setProperty('triggerPresente', true);
  }
}

Lo script è abbastanza semplice e commentato. Se hai domande o chiarimenti sul funzionamento – o proposte di miglioramento – puoi usare i commenti all’articolo, più sotto.


Ho ultimato un’altra procedura per permettere il recupero autonomo della password da parte dei docenti. Similmente a quella presentata in questa pagina, si compone di due moduli e uno script. Il procedimento è leggermente più complesso: introduce alcune forme di controllo per prevenire reset della password non autorizzati. Indicazioni nel post dedicato.

This error message is only visible to WordPress admins

Error: No connected account.

Please go to the Instagram Feed settings page to connect an account.