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 Google Workspace 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 Google Workspace 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 Google Workspace 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 Google Workspace 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.
Autorizzazioni e configurazione iniziale
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 Google Workspace 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).
Effettua le modifiche per il tuo dominio
- 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
- 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 Google Workspace:<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 Google Workspace:<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 Google Workspace:<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.
Variazioni e approfondimenti
In alcune strutture organizzative lo script non è immediatamente applicabile, ma ha bisogno di alcune personalizzazioni. Pubblico qui di seguito alcune casistiche, aggiornate via via a partire dalle richieste fatte nei commenti. Se la situazione della tua scuola non è contemplata dagli esempi di questa pagina, usa i commenti per fare una richiesta. Se possibile, aggiornerò questa sezione con nuove proposte di variazione.
Lunghezza della password maggiore di 8 caratteri
Se nella sezione Sicurezza della console di amministrazione è stata impostata una lunghezza minima della password diversa da 8 caratteri (quella di default), è possibile cambiare la lunghezza della password generata dallo script modificando la riga 88:
for (var j = 0; j < 8; j++) {
Sostituisci il numero 8 con la lunghezza desiderata e salva lo script.
Docenti e/o studenti ripartiti in più unità organizzative
Alcune scuole optano per una struttura organizzativa simile a questa:
- Infanzia
- Docenti
- Alunni
- Primaria
- Docenti
- Alunni
- Secondaria
- Docenti
- Alunni
e così via. In questo scenario non è possibile individuare l’unità organizzativa degli autorizzati alla modifica password (docenti) o degli utenti cui la procedura può essere applicata (studenti) come indicato sopra. La variabile dello script infatti contiene una sola unità organizzativa che raggruppa i docenti (e un’altra per gli studenti).
In questo caso, si può modificare la procedura di verifica.
Lo script originale cerca il percorso dell’unità organizzativa dell’utente, e vede se è uguale o sottoinsieme di quello indicato nella variabile. Ad esempio, se indichiamo nella variabile l’unità organizzativa /Personale/Docenti, un docente che si trovi in /Personale/Docenti/Primaria è autorizzato. La verifica è stretta: è autorizzato se appartiene a /Personale/Docenti, o un’altra unità organizzativa contenuta in questa. Stessa logica, declinata diversamente, per gli studenti.
Le modifiche
Nella modifica proposta sotto, la verifica è meno stringente, ma più versatile. Indichiamo nella variabile non più l’unità organizzativa ‘contenitore’, ma una parola chiave che identifica tutte le unità organizzative che vogliamo includere. Se guardiamo la struttura esemplificativa sopra indicata, i docenti si trovano in uo diverse, ma tutti i loro percorsi contengono la parola chiave Docenti. Lo script ora cercherà il percorso dell’unità organizzativa dell’utente in questione, e controlla che al suo interno si trovi la parola chiave, indipendentemente da quello che la precede o segue. Come sopra, vale l’analogo anche per gli studenti.
Ecco le modifiche da apportare allo script. Modifichiamo riga 11 e 12 in questo modo:
var keywordUoDocenti = 'Docenti'; var keywordUoAlunni = 'Alunni';
Nota che, oltre al nome diverso delle variabili, abbiamo eliminato lo slash / dalla stringa: ora non serve più. Naturalmente, ogni scuola modificherà le due diciture Docenti e Alunni prendendo la nomenclatura giusta dalla propria struttura organizzativa.
Ora è sufficiente modificare le due occorrenze delle variabili rinominate. La riga 26 diventa dunque:
var utenteAutorizzato = verificaOrganizzazioneUtente(richiedente, keywordUoDocenti);
mentre la riga 65 diventa:
var reimpostazioneValida = verificaOrganizzazioneUtente(accountReimpostazione, keywordUoAlunni);
Non essendomi possibile testare al momento il dettaglio di questa soluzione, consiglio di creare un paio di account di prova (sia docente che alunno) e di fare alcuni test. Importante provare sia procedure di successo, che simulare eventuali errori, e vedere se la procedura si comporta come dovrebbe. In caso di problemi, potete segnalarli nei commenti.
Inviare la password ad un ulteriore indirizzo email
Alcune scuole hanno una lista di email dei genitori già verificate. Perché provengono dal gestionale, dal registro elettronico o sono utilizzate abitualmente per le comunicazioni con le famiglie. In tal caso è possibile saltare un passaggio rispetto alla procedura indicata sopra. L’email con la password può essere inviata quasi in copia anche all’indirizzo del genitore. L’insegnante che compila il modulo riceve comunque la mail con la password (o con l’indicazione dell’eventuale errore), ma non si deve fare carico di consegnare le credenziali reimpostate.
Consiglio di implementare questa procedura solo dove le email dei genitori siano verificare precedentemente; se vengono utilizzate mail indicate di volta in volta, non si ha certezza che la richiesta provenga veramente da un genitore. E potremmo consegnare le credenziali reimpostate potenzialmente a chiunque.
Per questa procedura modificata ho:
- aggiunto una domanda nel modulo, in cui inserire l’indirizzo email ulteriore cui inviare le credenziali reimpostate
- reimpostato leggermente lo script, in modo che acquisisca il nuovo dato, e invii la mail anche all’indirizzo ulteriore
- effettuato alcuni ritocchi perchè la procedura si adatti al nuovo scenario
Visto che non ci sono modifiche sostanziali, è sufficiente:
- scaricare il file modificato da qui: https://docs.google.com/spreadsheets/d/12hHdesTn5ehSSfSCC5C0p5Hd0ap2RidLB0ilB0Sjt1g/copy
- seguire le istruzioni indicate più sopra per la personalizzazione dello script, del modulo e la configurazione iniziale
Consiglio come sempre di fare alcuni test con account di prova, prima di utilizzarlo a regime. In particolare per questo file con modifiche, ho fatto alcuni test sul mio dominio, ma non ho ancora riscontri da domini diversi. Fai alcune prove – anche simulando errori – e se tutto funziona utilizzalo. Se incontri errori o comportamenti imprevisti, puoi segnalarli nei commenti e cercherò di sistemare.
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.
Ho scaricato e fatto qualche prova. Sembra che funzioni tutto.
E’ fantastico! Passo un sacco di tempo a resettare password.
Grazie Mille
Complimenti.
Mi servirebbe uno script simile per bloccare la compilazione di un modulo solo ad una sottounità organizzativa. Puoi aiutarmi?
ciao Mario.
1. va applicato ad uno script come questo – per reimpostazione password – o serve ad altri scopi?
2. ti interessa bloccare la compilazione vera e propria del modulo, o è sufficiente che dopo la compilazione venga bloccata l’esecuzione dello script che ne consegue se l’utente non è autorizzato? questo secondo scenario è più semplice da gestire, e già compreso nello script di questo post
Salve Daniele,
grazie per la risposta immediata,
mi serve per somministrare prove ad alcuni alunni e voglio consentire solo ad alcuni alunni di entrare nel modulo, mentre a quelli a cui non è consentito deve uscire un messaggio del tipo “non sei autorizzato a consultare le domande di questo modulo”.
Mi piacerebbe anche registrare le risposte date fino al termine del tempo messo a disposizione per la compilazione del modulo, visualizzando un avviso dei secondi rimasti a disposizione, (tipo Kahoot).
Chiedo troppo?
prima richiesta: un po’ complesso, ma credo si potrebbe fare. se vuoi qualcosa del genere devi utilizzare classi e metodi di Form Services: https://developers.google.com/apps-script/reference/forms. io li uso poco, solitamente creo script che agiscono sul foglio di lavoro delle risposte – come quello in questo post – non saprei indicarti al volo. da una scorsa veloce si potrebbero utilizzare le funzioni per la creazione del form direttamente da script, e poi inviare il link per mail dopo verifica condizionale se l’utente è tra gli autorizzati. mi sembra comunque molto laborioso per il risultato – se il modulo è un test/verifica, andrebbe rifatto quasi tutto ogni volta. se invece è un modulo più duraturo, forse si può investire il tempo
probabilmente è più agevole fare una cosa come doppio modulo: il primo serve solo a raccogliere gli indirizzi email; se l’indirizzo è autorizzato, lo script invia il link per il secondo, che è il modulo vero e proprio. non è una vera forma di blocco, ma potrebbe fare quasi lo stesso servizio
seconda richiesta: molto complesso. siamo a livello di add-on ben strutturato, serve agire anche sull’interfaccia della pagina web: serve un insieme di script che gestiscono sia il flusso dati che la presentazione della pagina. forse tra i componenti aggiuntivi si trova già qualcosa, poi lì il problema è che se lavori per gli alunni il tema privacy e trattamento dei dati diventa cruciale, e pochissimi add-on sono gdpr compliant
Ciao
Ho provato lo script ed è utilissimo.
Volevo sapere se si può fare in modo che venga inviata la mail con la password temporanea direttamente all’indirizzo di recupero indicata nell’account?
Spero di non chiudere troppo.
Grazie Marco
ciao Marco. se ho capito bene, tu hai inserito per ogni studente un indirizzo email di recupero (quindi un indirizzo email personale dello studente, o dei genitori) e vorresti che lo script recuperi quell’indirizzo dietro le quinte per inviare la mail direttamente a quello, senza passare per il docente?
Si, vorrei far si che lo script facesse quello che hai detto. ti spiego come vorrei organizzare la procedura nella mia scuola, io consegno il modulo ai coordinatori, non a tutti i docenti per evitare che i ragazzi chiedano a più professori, i coordinatori non hanno bisogno di fare alcuna verifica perchè conoscono l’alunno e utilizzando il modulo questo invia la mail direttamente all’indirizzo fornito per il recupero. Così da evitare il passaggio di mano della password di recupero o errori di invio.
ciao e grazie
potresti fare così – occhio che i numeri di riga fanno riferimento allo script pubblicato in questo post, il tuo potrebbe avere numeri di riga non coincidenti in caso di modifiche:
– aggiungi in riga 100:
var emailRecuperoStudente = user.recoveryEmail;
– modifichi riga 109 così:
inviaEmail(emailRecuperoStudente, oggetto, messaggio);
dovresti ottenere al volo quanto chiedi
fai qualche prova prima di implementarlo
attenzione che questo è solo un suggerimento, non è previsto un controllo errore
in caso lo studente non abbia email di recupero impostata lo script si interromperà con un errore
per implementazione fatta bene, dovresti prevedere cosa fare in caso di errore, con un try… catch, oppure una verifica con if; per implementazione più artigianale puoi anche lasciare così, e se la reimpostazione non avviene si controlla
Grazie Daniele, pensavo anche io fosse complesso.
Attualmente uso questbase per fare verifiche e pensavo di sostituirlo con moduli perché non viene più implementato e mi potrei trovare in una situazione di mancanza di assistenza o di indisponibilità del server come è già successo.
Per favore ti chiedo si segnalarmi se hai da suggerirmi soluzioni alternative per realizzare verifiche a risposta multipla, con l’assegnazione di punti diversi per ogni opzione e un punteggio bonus per chi seleziona tutte e solo le opzioni corrette, con un tempo per ogni domanda modificabile e con accesso riservato solo agli alunni selezionati.
Saluti
Salve. Ho delle difficoltà per capire questa parte: ” var uoDocenti = ‘/Docenti’;
var uoAlunni = ‘/Alunni’;” . Come faccio a reperire queste informazioni? Io ho un’unità organizzativa principale e poi delle sotto-unità. Che percorso devo usare?
Mi spiace per l’incompetenza ma proprio non riesco a trovare una soluzione.
Grazie mille!
ciao Lara. devi inserire tutto il percorso dell’unità organizzativa dei docenti (e poi degli alunni)
funziona in questo modo: all’inizio metti sempre / (slash) che sostituisce unità organizzativa principale del tuo Istituto. poi di seguito la sotto-unità organizzativa successiva, di nuovo slash, sotto-unità organizzativa successiva… finché arrivi a quella dei docenti
se ad esempio le unità organizzative nel tuo istituto sono IC Nome del mio istituto > Personale > Docenti dovrai inserire questo:
/Personale/Docenti
e così via
se i docenti sono ulteriormente suddivisi in sotto unità organizzative, non importa aggiungerle: la funzione dello script applica l’autorizzazione a procedere al reset password all’unità organizzativa indicata (in questo esempio /Pesonale/Docenti) e a tutte le relative sotto-unità organizzative
se quindi l’unità organizzative /Docenti/Personale contiene le sotto-unità organizzative Infanzia, Primaria e Secondaria non occorre inserirle: saranno automaticamente autorizzate in quanto contenute in /Docenti/Personale
analogo funzionamento per gli alunni
Grazie mille!!!!
Ho seguito le tue indicazioni ma nell’iserimento nel modulo dell’indirizzo dello studente mi da sempre questo messaggio: “Inserisci un indirizzo email di G Suite corretto”
nel modulo bisogna modificare la convalida della risposta: devi sostituire la dicitura generica della convalida ‘@miodominio.it’ con il tuo dominio effettivo
hai già fatto questo passaggio?
Funziona!!! Grazie!!!
Molto interessante. Mi ci metto appena posso sia per studenti che per docenti. Sto cercando un modo per permettere la prenotazione ad un evento con un limite massimo. Pensavo con Moduli, ma non so come fare per impedire di superare il limite… Ci vorrebbe uno script… Tu hai una soluzione pronta? Grazie mille!
ciao Matteo, non ho soluzione già pronta, anche se avevo fatto qualcosa del genere tempo fa, ma piuttosto rudimentale. appena ho tempo di sistemare un po’ quella soluzione provvisoria cerco di pubblicare qualcosa di utile
bentrovato Matteo, sono riuscito a sistemare un po’ il materiale che chiedevi, per limitare il numero di iscrizioni a un Modulo senza installare componenti aggiuntivi esterni. trovi indicazioni in questo nuovo post: https://www.debiagi.cloud/g-suite/limitare-risposte-modulo-google/
Ciao Daniele,
arrivo un po’ in ritardo a scoprire questa utilissima procedura dopo aver trascorso, ahimè, tantissimo tempo a recuperare password lo scorso anno scolastico!
Ho letto la tua guida, che è molto chiara e semplice da seguire, ma ho un dubbio e per questo ti scrivo; nel mio istituto le UO sono organizzate in questa maniera:
1- IC-Nome Istituto
1.1 – Infanzia (che contiene al suo interno le UO Alunni, Docenti, Assistenti)
1.2 – Primaria (che contiene al suo interno le UO Alunni, Docenti, Assistenti
1.2 – Secondaria (che contiene al suo interno le UO Alunni, Docenti, Assistenti)
Ne risulta che i docenti autorizzati al reset della password si trovano in tutte le sotto UO:
/Infanzia/Docenti
/Primaria/Docenti
/Secondaria/Docenti
E gli studenti ai quali applicare il reset della password si trovano in altrettante sotto UO:
/Infanzia/Alunni
/Primaria/Alunni
/Secondaria/Alunni
Esiste un modo per poter far si che le variabili da modificare nello script uoDocenti e uoAlunni accettino diversi valori?
Grazie mille in anticipo per il tuo prezioso contributo!
ciao Piero, si può fare in diversi modi. per avere una procedura generale che permetta di indicare più unità organizzative, indipendentemente dalla struttura che la scuola si è data, bisognerebbe riscrivere diverse parti dello script: quando avrò tempo forse proverò a farlo. per il tuo caso specifico invece (e per le scuole che hanno struttura organizzativa strettamente analoga alla tua) può essere sufficiente una modifica minore ad un paio di parti dello script. ho aggiunto in calce al post le indicazioni che potrebbero servirti. non ho la possibilità di testare in prima persona questa soluzione, non essendo le mie unità organizzative ordinate così. ti consiglio di creare un paio di account di prova (sia docente che studente fittizio) ed effettuare alcuni tentativi (sia corretti che simulando qualche errore) in modo da verificare che si comporti come deve. se lo fai e vuoi dare un riscontro (positivo o di malfunzionamenti) qui sotto, potrebbe essere utile anche ad altri
Buongiorno Daniele,
innanzitutto ti ringrazio per la pronta risposta.
Mi attivo subito per modificare lo script come suggerito e fare dei test; scriverò il resoconto in un commento.
Buongiorno,
come anticipato ho adattato lo script seguendo le indicazioni aggiunte e tutto funziona alla perfezione.
Ho modificato le righe dello script prestando attenzione a lavorare sulle variabili corrette, ho rettato le variabili inserendo il nome preciso dell’UO cosi Coe risulta dalla consolle di Admin di Gsuite e poi ho fatto delle prove.
Tutto funziona benissimo!
Grazie mille
bene, grazie del feedback!
Ciao Daniele,
avevo già scritto un post di risposta ma non lo trovo!
Vi condivido la mia esperienza:
Ho modificato lo script seguendo le tue indicazioni, ho adattato le variabili coi nomi delle nostre UO, ho creato degli account test e fatto delle prove; funziona tutto alla grande.
I docenti riescono ad inoltrare la richiesta di reset password correttamente cosa che viene vietata agli account degli alunni.
I docenti non possono richiedere la modifica della password di altri docenti.
Grazie mille per il tuo preziosissimo contributo.
ciao Piero, la tua risposta era arrivata, io la vedo correttamente. ne approfitto per ringraziarti nuovamente del riscontro, è sempre prezioso il test di altri fuori dal mio dominio
Buongiorno Daniele e grazie per la tua professionalità che metti a disposizione di tutti. Ho un quesito. Il nostro istituto (come penso tutti) conserva gli indirizzi email privati di tutti i genitori degli alunni, per eventuali comunicazioni. La nostra politica prevede che le richieste di cambio password debbano pervenire da una di tali email. Ciò mi permette di identificare correttamente lo studente che effettua la richiesta, anche se non lo conosco personalmente. E’ possibile aggiungere al modulo un secondo campo email dove inserire questo indirizzo e fare in modo che lo script invii la nuova password ANCHE a questo indirizzo? Grazie
ciao Luciano. sì, è possibile fare quello che chiedi, con una modifica allo script non troppo complessa. non appena ho un po’ di tempo faccio alcuni ritocchi e provo a darti qualche indicazione dettagliata
Grazie, molto gentile
ciao Luciano, ho effettuato alcune modifiche per aggiungere la possibilità che hai chiesto. qui sopra, verso la fine del post, alla sezione Inviare la password ad un ulteriore indirizzo email trovi il nuovo file da copiare, con modulo adattato e script già modificato. ho effettuato alcuni test nel mio dominio e tutto sembra funzionare, ma ti consiglio di provarlo per bene con alcuni account di prova, prima di implementarlo – meglio se simuli anche alcuni errori (compila un non docente, inserisci un indirizzo di un alunno inesistente, ecc.) in modo da testarlo a dovere. nel caso tu lo utilizzi e riesci a fare i test, se vuoi scrivere nei commenti un riscontro – positivo o con errori – sarebbe gradito per migliorare la procedura. grazie!
Gentile Daniele, ho seguito il tuo video sul “reset della password per gli studenti su GSuite” tramite moduli. La mia procedura si blocca al primo passaggio (Funzioni utenti) , nella concessione dell’autorizzazione mi viene restituito il seguenti errore: “Errore 400: admin_policy_enforced….”. Potresti darmi supporto ? Grazie
ciao Domenico, quasi certamente il problema è di un permesso non sbloccato a livello globale in console di amministrazione
in console vai alla voce Sicurezza > Controlli API, alla sezione Panoramica clicca su Gestisci i servizi Google; controlla se la voce Console di amministrazione di Google Workspace è settata su Limitato; in questo caso clicchi in fondo su Modifica accesso e scegli Senza restrizioni
poi tornando ai Controlli API verifica che se nella sezione successiva Impostazioni sia selezionato Considera attendibili le app interne e di proprietà del dominio (per alcuni script potrebbe bastare anche solo la seconda indicazione, ma con queste indicazioni tutti gli script che propongo normalmente funzioneranno)
così facendo autorizzi gli script interni ad utilizzare le funzionalità amministrative
questa è solo un’impostazione globale preliminare, diciamo; solo gli script che saranno autorizzati poi singolarmente avranno accesso alle funzionalità della console (come richiesto dal mio script)
e solo gli admin potranno autorizzare in questo senso: anche se apparentemente un utente normale può autorizzare ed eseguire tutti gli script, ogni volta che nello script è presente una funzione che necessita del permesso di accedere alla console, l’utente normale riceverà errore di autorizzazione, l’admin no
quindi la sicurezza viene preservata: ricordo che quando copi lo script nel tuo Drive, questo non c’entra più con il file originale – mio – né con la console di amministrazione originale – della mia scuola: tutto diventa una copia di tua proprietà, indipendente e come nuova
Ciao Daniele,
se volessi che la password di reset fosse del tipo cognome.nome (dello studente) come potrei fare ? L’account tipo è cognome.nome@miodominio.it
Grazie
ciao Domenico. io non consiglio password di questo tipo per motivi di sicurezza e protezione dei dati. se però in certi contesti si ritiene utile procedere in questo modo, bisogna sostituire tutte le righe dello script dalla 86 alla 91 con una riga come questa:
var password = accountReimpostazione.split('@')[0];
questo vale solo se tutti i nomi utente sono esattamente nel formato indicato
un modo un po’ più elaborato previene errori nel caso in cui, per omonimie, alcuni degli account abbiano un suffisso ulteriore (ad es. cognome.nome.02@miodominio.it; in questo caso otteniamo solo cognome.nome con qualcosa di questo tipo:
var arrayPassword = accountReimpostazione.split('@')[0].split('.');
var password = `${arrayPassword[0]}.${arrayPassword[1]}`;
come sempre, il codice andrà adattato per la situazione concreta di ogni console
Ciao! In questi giorni ho sperimentato il seguente problema: un mio allievo è riuscito a resettare in autonomia la sua password di G-Suite senza il reset da parte dell’amministratore come di solito avviene per tutti gli altri. Come mai è accaduto questo? C’è qualcosa da controllare?
state utilizzando il mio foglio per gestire il reset password degli studenti? se si, avete controllato nel foglio delle impostazioni che non ci sia indicata l’unità organizzativa con gli studenti, oppure un unità organizzativa di livello superiore che la contiene?
Ciao! Cosa devo fare per far si che chiunque sia utenteAutorizzato?
Grazie!
ciao Alessio. in realtà se lavori in una scuola permettere a tutti gli utenti di essere autorizzati alla reimpostazione password non solo non è una buona idea, ma va contro i termini di servizio e le disposizioni di legge: i minori di 16 anni non devono poterlo fare in autonomia. detto questo, modifichi chi è utente autorizzato alla riga 11 dello script, cambiando il valore della variabile uoDocenti: lì inserisci il percorso dell’unità organizzativa più a monte che contiene tutti gli utenti che vorrai autorizzare al reset password. automaticamente anche tutti gli utenti delle sotto unità organizzative di quella indicata saranno autorizzati. se lavori in un’organizzazione dove non sono presenti minori di 16 anni, potresti indicare lì semplicemente l’unità organizzativa radice con uno slash, e tutti gli utenti del dominio potrebbero reimpostare la password. se lo fai con gli studenti, oltre al problema legale accennato, ti troveresti nella situazione per cui ogni studente può reimpostare la password di ogni altro studente…
Ciao, bellissima guida. Era da tempo che cercavo una soluzione del genere. Sono un AT che lavora nei comprensivi (ben 5) e riceviamo un sacco di richieste di cambi psw. Premetto che devo ancora testare il tuo script ma mi piacerebbe modificare lo script con le seguenti funzione:
– dare la possibilità di solo ad alcuni account specifici di modificare le psw (ad esempio il mio account ed altri 2 colleghi fidati). Questi account sono già dentro una UO in cui ci sono altre persone che non devono avere questo tipo di privilegio. E’ possibile scrivere manualmente i singoli account abilitati?
– Inserire nel modulo un campo “mail genitore/richiedente”. Quando resetto la psw lo script invierà automaticamente una mail al genitore con un testo pre compilato (eg. Buongiorno, come da lei richiesto abbiamo provveduto a resettare la psw per l’account “nome.cognome@icistituto.edu.it” . La psw per il primo accesso è …..). Così facendo mi basta inserire le 2 mail ed il gioco è fatto. Nella mail potrei mettere anche dei link a tutorial base all’utilizzo degli account così da non scriverli ogni volta.
Grazie del tuo tempo.
Alessandro
ciao Alessandro, grazie.
per la seconda richiesta trovi qualcosa di già pronto: se guardi nell’ultima sezione del post Variazioni e approfondimenti, c’è un file modificato proprio per l’invio ad ulteriore indirizzo email. se vuoi personalizzare il testo della mail, basta aprire lo script e cercare il corpo del testo – è un testo html, fai le modifiche tenendolo presente.
per la prima richiesta invece basta qualche piccola modifica che puoi fare direttamente dall’editor di Apps Script (i numeri di riga si riferiscono al codice pubblicato in questa pagina; quelli che trovi nell’editor potrebbero variare leggermente):
1. sotto la riga 11:
var uoDocenti = '/Docenti';
aggiungi questa:
var listaAutorizzati = ['account1@miodominio.it', 'account2@miodominio.it'];
naturalmente sostituisci gli indirizzi email con i tuoi, e aggiungine eventualmente altri; fai attenzione alle virgolette e alle virgole, è un array
2. modifica la riga 26:
var utenteAutorizzato = verificaOrganizzazioneUtente(richiedente, uoDocenti);
così:
var utenteAutorizzato = verificaAppartenenzaListaAutorizzati(richiedente, listaAutorizzati);
3. aggiungi in fondo allo script (guarda di posizionarti dopo l’ultima parentesi, altrimenti restituisce errori) queste righe:
function verificaAppartenenzaListaAutorizzati(account,lista) {
return (lista.indexOf(account) > -1);
}
salva con l’icona in alto, chiudi l’editor e fai qualche prova: dovrebbe funzionare subito
se fa quello che chiedi e hai voglia di dare un riscontro qui in un commento, sarebbe un feedback gradito: nel caso sia tutto ok aggiorno la guida sopra con una sezione nuova per questo caso specifico
Grazie infinite per questo strumento, è proprio quello che mi serviva!
L’unica cosa è che non mi funzionava… finché non ho fatto debug, notato che mi dava l’errore di password generata non valida e allungato la password a 10 caratteri. Non avevo proprio pensato a questa impostazione messa dal precedente Animatore Digitale, che la mia disavventura sia da monito agli sventurati futuri!
ciao Lorenzo, grazie della puntualizzazione! aggiungo il tuo rilievo nella casistica delle possibili modifiche
Prima di tutto desidero ringraziarti per la condivisione di un lavoro così utile per tanti amministratori di Google Workspace for education.
Da parte mi ho provato lo script nativo e funziona;
ho provato a modificarlo con l’inserimento della “keyword” per consentire il controllo dello studente nella nostre organizzazioni molto strutturate e funziona;
ho provato anche ad inserire la lista di user autorizzati e funzione anche quella modifica.
Ho poi osservato la variante da te predisposta che prevede l’invio diretto della password alla email dei genitori e funziona senza problema.
Come ultima parte ho provato ad importare in quest’ultima versione le altre modifiche: keyword per organizzazioni e lista user autorizzati e… non funziona e non riesco a capire come mai.
C’è un qualche errore “classico” che ti viene in mente che potrei aver commesso?
In ogni caso grazie di tutto.
ciao Severino, grazie del riscontro. l’unica cosa che mi viene in mente al volo è che dopo le modifiche forse ci sia lo script da riautorizzare. hai già provato a ripetere la menu la funzione per concedere le autorizzazioni e poi a testare di nuovo il funzionamento? se questo non basta, servirebbe un log di eventuali errori, che puoi ricavare dall’editor dello script, andando a vedere nelle Esecuzioni
Ora funziona tutto, sono ripartito da capo, facendo molta attenzione a non fare pasticci e… ora il modulo risponde in pieno ai miei bisogni:
a) operatori selezionati tramite lista,
b) parola chiave per il controllo del fatto che l’utente sia uno studente nel contesto delle nostre numerose e ramificate unità organizzative (è bastato inserire “Classe” davanti all’indicazione dell’unità organizzativa 1ªA, 2ªA, ecc.) e
3) invio diretto all’email indicata dalla famiglia.
Grazie di cuore per il prezioso “regalo”.
bene, mi fa piacere. buona l’idea di una parola chiave direttamente nelle uo interessate e non in una genitore, può essere utile e semplificare la trasmissione delle uo in determinati contesti