‫-: Quindi, dopo l'aggiornamento, consentiamo ora anche all'utente corrente di
‫eliminare sostanzialmente il suo account.
‫Ora, quando un utente decide di eliminare
‫il suo account, in realtà non eliminiamo quel documento dal database.
‫Ma invece abbiamo semplicemente impostato l'account su inattivo.
‫In modo che l'utente possa
‫in futuro riattivare l'account e anche in modo che
‫possiamo ancora sostanzialmente accedere all'account in futuro,
‫anche se ufficialmente, diciamo che è stato cancellato.
‫Va bene?
‫Quindi per implementarlo, prima di
‫tutto dobbiamo creare una nuova proprietà nel nostro schema.
‫Quindi, andiamo
‫lì.
‫E ora vogliamo
‫avere un campo chiamato attivo.
‫Va bene.
‫Che dovrebbe essere del
‫tipo booleano.
‫Ok, e per impostazione
‫predefinita
‫sarà vero.
‫Quindi qualsiasi utente che viene
‫creato nuovo è ovviamente un utente attivo
‫e quindi il valore booleano è impostato su true.
‫Inoltre, non vogliamo mostrarlo nell'output, ok.
‫Perché fondamentalmente vogliamo
‫nascondere questo dettaglio di implementazione all'utente.
‫Va bene?
‫E quindi non vogliamo che nessuno
‫sappia che questo flag, quindi questo flag attivo è qui, ok.
‫Quindi diciamo seleziona e impostalo su false, va bene.
‫Quindi,
‫per eliminare l'utente ora, tutto
‫ciò che dobbiamo fare è
‫sostanzialmente impostare quel flag attivo su false.
‫Va bene.
‫Quindi creiamo quella funzione qui,
‫exports. deleteMe, quindi
‫era updateMe e
‫ora è deleteMe e
‫quindi
‫sappiamo già che stiamo usando un catchAsync qui, giusto?
‫E poi Async perché
‫in pratica sappiamo già che aggiorneremo l'utente.
‫Quindi la richiesta
‫risponde dopo.
‫Quindi,
‫attendi Utente. trova per ID e
‫aggiorna.
‫Ok, e ancora, ovviamente ci sono
‫solo opere per gli utenti che hanno effettuato
‫l'accesso e quindi l'ID utente viene comodamente memorizzato su richiesta. utente. ID.
‫e i dati che vogliamo aggiornare sono
‫semplicemente attivi
‫e impostati su false.
‫Va bene.
‫Ora anche inviare la risposta è abbastanza facile.
‫Usiamo il codice
‫204 per cancellato che poi farà in modo che in realtà in
‫Postman non vediamo nemmeno questa risposta, ok.
‫Ma lo inviamo comunque insieme
‫alla richiesta perché è sempre la migliore pratica.
‫Quindi, è ancora un successo e quindi ricorda
‫che non inviamo alcun dato.
‫Quindi, impostalo semplicemente su no.
‫Va bene, e ora ovviamente aggiungilo anche a
‫tutte le rotte qui.
‫Quindi è abbastanza simile.
‫Quindi deleteMe, quindi anche qui deleteMe e ora
‫in realtà stiamo usando il
‫metodo delete http.
‫Ok, e ancora
‫una volta, non elimineremo effettivamente un utente dal database.
‫Ma finché l'utente non è più accessibile da nessuna parte, è comunque
‫possibile utilizzare questo metodo http qui.
‫Va bene, allora proviamolo adesso.
‫Ok, anche se non siamo ancora pronti
‫al 100%, proviamo lo stesso ora.
‫Va bene, quindi, deleteMe ed
‫è un percorso protetto, quindi dobbiamo
‫essere registrati e quindi creiamo la
‫nostra
‫intestazione di autorizzazione,
‫Bearer Token e
‫ovviamente questo e questo è davvero tutto.
‫Non abbiamo bisogno di passare alcun dato nel corpo.
‫Non è necessario trasferire alcun dato nell'URL.
‫Va bene, perché ancora una volta, gli unici
‫dati necessari sono l'ID utente corrente e
‫quello non è codificato all'interno del nostro token web adiacente.
‫Va bene?
‫Quindi quello che dobbiamo fare è anche eliminare e sì,
‫ora dovrebbe funzionare.
‫Quindi, prima di farlo,
‫prendiamo l'elenco di tutti gli utenti.
‫Va bene, quindi quello che stiamo cancellando
‫ora è quest'ultimo.
‫Quindi questo che abbiamo appena creato nell'ultima lezione.
‫Ok, e stiamo
‫lavorando con questo perché è l'ultimo che ha effettuato
‫l'accesso e quindi è questo token qui che
‫è ora memorizzato nella nostra variabile token.
‫Ok, quindi quando elimineremo
‫l'utente sarà basato sull'ID proveniente da questo token.
‫Quindi proviamolo ora.
‫E infatti otteniamo il nostro 204.
‫E ora quello che mi
‫interessa è vedere se la proprietà select qui è cambiata.
‫E in realtà sembra esattamente lo stesso qui.
‫E questo perché non stiamo
‫perdendo il campo di selezione all'utente.
‫E quindi abbiamo davvero bisogno di vederlo qui.
‫Va bene e quindi in effetti abbiamo qui attivo impostato su false.
‫Ok, questo è quello che volevo dire prima.
‫Quindi non stiamo perdendo i campi attivi all'utente,
‫non il campo selezionato.
‫Così attivo è visibile solo per noi qui
‫in bussola ma non per l'utente.
‫Ora, come ultimo passaggio, ovviamente
‫non vogliamo mostrare gli utenti inattivi in
‫questo output, giusto.
‫E come pensi che potremmo implementarlo?
‫Bene, useremo qualcosa che è molto tempo fa di
‫cui abbiamo parlato due o tre sezioni fa,
‫che è il middleware di query, ok.
‫Quindi il middleware di query è perfetto per
‫questo perché ora possiamo praticamente aggiungere un passaggio
‫prima di qualsiasi altra query che stiamo facendo
‫da qualche parte nella nostra applicazione.
‫Quindi andiamo al nostro modello utente qui
‫e aggiungiamo quel middleware qui.
‫Quindi userSchema. pre, quindi qualcosa che accadrà prima di una query e
‫quella query sarà una ricerca.
‫Ok, quindi questo è ciò che rende questo middleware di query.
‫Quindi una funzione regolare perché ricorda
‫che altrimenti non avremo accesso alla discordia o
‫almeno non avrà il valore
‫che ci aspettiamo
‫che abbia.
‫E ricorda che qui in realtà abbiamo usato un'espressione regolare prima
‫sostanzialmente per dire che vogliamo
‫che questa funzione middleware si applichi a
‫ogni query che inizia con find.
‫Quindi non solo trova, ma anche cose come trova
‫e aggiorna, trova ed elimina e tutte le domande del genere.
‫Ok, quindi usiamo un'espressione regolare alla ricerca
‫di parole o stringhe che iniziano con trova.
‫Quindi questo è ciò che fa questo simbolo qui.
‫E poi termina l'espressione regolare.
‫Quindi molto semplice.
‫Questo è quello che anche io posso
‫scrivere senza andare prima su Google e
‫provare a trovarlo lì.
‫Ok, ricorda che questo è
‫il middleware della query e quindi punta
‫alla query corrente.
‫Ok, quindi torniamo subito qui
‫per vedere come funziona.
‫Quindi abbiamo il
‫nostro ottenere tutti gli utenti qui e qui ovviamente abbiamo una query di ricerca.
‫E ora, prima
‫che la query venga effettivamente eseguita, vogliamo aggiungervi qualcosa.
‫Vale a dire che vogliamo solo trovare documenti che
‫hanno la proprietà attiva impostata su true.
‫Va bene, quindi è facile.
‫Ecco qui.
‫E
‫così questo. trova e poi ovviamente il nostro oggetto filtro documenta solo
‫con attivo impostato
‫su true.
‫E questo è tutto.
‫Chiamando il prossimo middleware e abbiamo finito.
‫Ok, quindi se ora eseguiamo la
‫stessa query, quest'ultima non dovrebbe più essere visualizzata perché di nuovo è impostata
‫su false.
‫E quindi non corrisponderà alla query
‫che abbiamo appena scritto.
‫Ok, ora non abbiamo nessun utente qui
‫e immagino che sia perché gli altri non hanno
‫esplicitamente la proprietà attiva impostata
‫su true.
‫E quindi facciamo ciò che abbiamo effettivamente fatto in quell'altra sezione
‫in cui diciamo che attivo non dovrebbe essere falso.
‫Ok, quindi usiamo
‫l'operatore non uguale a e
‫che ovviamente dovrebbe essere nel suo oggetto.
‫Quindi non uguale a falso.
‫Ok, quindi è molto diverso qui in questo caso.
‫Bene, quindi tutti i documenti in
‫cui attivo non è uguale a falso dovrebbero ora essere visualizzati
‫e quindi gli altri due dovrebbero essere tornati.
‫E infatti eccoli qui.
‫Ok, quindi è così che eliminiamo
‫sostanzialmente i nostri utenti senza eliminarli dal database.
‫Ok, quindi non eliminiamo i documenti, li
‫contrassegniamo solo come inattivi.
‫Ok, salviamolo velocemente qui.
‫Elimina l'utente
‫corrente.
‫Ottimo e con questo abbiamo effettivamente terminato
‫la parte di autenticazione e autorizzazione di questa
‫sezione.
‫Quindi tutto ciò che era correlato a questi
‫argomenti e anche agli utenti come l'aggiornamento e l'eliminazione degli utenti.
‫Anche questo fa parte dell'autenticazione
‫e dell'autorizzazione.
‫Ora, nel resto di questa sezione,
‫parleremo di sicurezza perché ovviamente anche questa
‫è in qualche modo
‫correlata all'autenticazione.
‫Ok, quindi parleremo di
‫un paio di best practice e
‫poi ne implementeremo alcune nel nostro progetto.