‫-: Erlauben wir also nach dem Update auch dem aktuellen
‫Benutzer, seinen Account grundsätzlich zu löschen.
‫Wenn ein Benutzer nun beschließt, sein Konto
‫zu löschen, löschen wir dieses Dokument tatsächlich nicht aus der Datenbank.
‫Aber stattdessen haben wir das Konto eigentlich nur auf inaktiv gesetzt.
‫Damit der Nutzer den Account
‫irgendwann wieder aktivieren kann und wir auch in Zukunft
‫grundsätzlich auf den Account zugreifen können,
‫auch wenn offiziell, sagen wir mal, gelöscht wurde.
‫Okay?
‫Um dies zu implementieren, müssen
‫wir zunächst eine neue Eigenschaft in unserem Schema erstellen.
‫Also, lass uns
‫dorthin gehen.
‫Und jetzt wollen wir
‫ein Feld namens active haben.
‫Okay.
‫Welches sollte vom Typ
‫Boolean sein.
‫Okay, und standardmäßig wird
‫es
‫wahr sein.
‫Jeder neu erstellte Benutzer ist
‫also natürlich ein aktiver Benutzer und
‫daher wird der Boolesche Wert auf true gesetzt.
‫Außerdem möchten wir dies nicht in der Ausgabe anzeigen, okay.
‫Weil wir dieses Implementierungsdetail
‫im Grunde vor dem Benutzer verbergen wollen.
‫Okay?
‫Und deshalb wollen wir nicht, dass
‫irgendjemand erfährt, dass diese Flagge, also diese aktive Flagge, hier ist, okay.
‫Also sagen wir select und setzen es auf false, in Ordnung.
‫Um
‫den Benutzer jetzt zu löschen,
‫müssen wir im Grunde nur
‫das aktive Flag auf false setzen.
‫Okay.
‫Lassen Sie uns diese Funktion hier
‫erstellen, Exporte. deleteMe, also
‫war es updateMe und
‫jetzt ist es deleteMe
‫und
‫wir wissen also bereits, dass wir hier ein catchAsync verwenden, oder?
‫Und dann Async, weil wir im
‫Grunde schon wissen, dass wir den Benutzer aktualisieren werden.
‫Also antwortet die Anfrage
‫als nächstes.
‫Warten Sie
‫also auf den Benutzer. nach ID suchen und
‫aktualisieren.
‫Okay, auch hier funktioniert's
‫natürlich nur für eingeloggte Benutzer und
‫so wird die Benutzer-ID auf Wunsch bequem gespeichert. Benutzer. Ich würde.
‫und die Daten, die wir aktualisieren möchten, sind
‫einfach aktiv
‫und setzen sie auf false.
‫Gut.
‫Das Zurücksenden der Antwort ist jetzt auch ziemlich einfach.
‫Wir verwenden den
‫204-Code für gelöscht, was es dann so macht, dass wir diese Antwort
‫in Postman tatsächlich nicht einmal sehen, okay.
‫Aber wir senden es trotzdem zusammen mit
‫der Anfrage, weil dies immer die beste Vorgehensweise ist.
‫Also, es ist immer noch ein Erfolg und dann denken
‫Sie daran, dass wir keine Daten senden.
‫Also einfach auf nein setzen.
‫Alles klar, und jetzt natürlich auch zu
‫allen Routen hier hinzufügen.
‫Das ist also ziemlich ähnlich.
‫Also deleteMe dann auch hier deleteMe und
‫jetzt verwenden wir tatsächlich
‫die delete http-Methode.
‫Okay, und noch einmal,
‫wir werden einen Benutzer nicht wirklich aus der Datenbank löschen.
‫Aber solange der Benutzer nirgendwo mehr erreichbar ist, ist es immer noch
‫in Ordnung, diese http-Methode hier zu verwenden.
‫In Ordnung, also probieren wir es jetzt aus.
‫Okay, auch wenn wir noch nicht 100% fertig
‫sind, aber versuchen wir es jetzt noch.
‫In Ordnung, also deleteMe und
‫es ist eine geschützte Route
‫und wir müssen uns anmelden und
‫so
‫erstellen wir unseren
‫Autorisierungs-Header, Bearer Token
‫und natürlich diesen und das war's eigentlich.
‫Wir müssen keine Daten im Körper weitergeben.
‫Wir müssen keine Daten in der URL übergeben.
‫Alles klar, denn die einzigen Daten, die
‫benötigt werden, sind die aktuelle Benutzer-ID
‫und diese ist nicht in unserem benachbarten Web-Token codiert.
‫Okay?
‫Was wir also auch tun müssen, ist löschen und ja, das
‫sollte jetzt funktionieren.
‫Bevor wir das tun, holen
‫wir uns die Liste aller Benutzer.
‫In Ordnung, und das, was wir jetzt löschen,
‫ist das letzte.
‫Also diese, die wir gerade in der letzten Vorlesung erstellt haben.
‫Okay, und wir
‫arbeiten mit diesem, weil es der letzte ist, der sich
‫eingeloggt hat, und daher ist dieser Token hier,
‫der gerade in unserer Token-Variablen gespeichert ist.
‫Okay, und wenn wir den Benutzer
‫jetzt löschen, basiert es auf der ID, die von diesem Token stammt.
‫Also versuchen wir es jetzt.
‫Und tatsächlich bekommen wir unsere 204.
‫Und jetzt interessiert
‫mich, ob sich die Select-Eigenschaft hier geändert hat.
‫Und hier sieht es tatsächlich genauso aus.
‫Und das liegt daran, dass
‫wir das Auswahlfeld nicht an den Benutzer weitergeben.
‫Und deshalb müssen wir es hier wirklich sehen.
‫Okay und tatsächlich haben wir hier aktiv auf false gesetzt.
‫Okay, das wollte ich schon mal sagen.
‫Wir geben also nicht die aktiven Felder an den
‫Benutzer weiter, nicht das Auswahlfeld.
‫Aktiv ist also nur für uns hier im Kompass
‫sichtbar, nicht aber für den Benutzer.
‫Als letzten Schritt wollen wir
‫dann natürlich nicht die inaktiven Benutzer in dieser
‫Ausgabe anzeigen, richtig.
‫Und wie könnten wir das Ihrer Meinung nach umsetzen?
‫Nun, wir werden etwas verwenden, das weit zurück liegt,
‫über das wir vor zwei oder drei
‫Abschnitten gesprochen haben, nämlich Abfrage-Middleware, okay.
‫Die Abfrage-Middleware ist also perfekt dafür, weil wir
‫jetzt im Grunde genommen einen Schritt vor
‫jeder anderen Abfrage hinzufügen können, die wir dann
‫irgendwo in unserer Anwendung durchführen.
‫Gehen wir also zu unserem Benutzermodell hier und
‫fügen wir diese Middleware hier hinzu.
‫Also userSchema. pre, also etwas, das vor einer Abfrage passiert und
‫diese Abfrage ein Find ist.
‫Okay, das macht diese Abfrage-Middleware aus.
‫Dann eine normale Funktion, denn denken
‫Sie daran, dass wir sonst keinen Zugriff auf den
‫Discord haben oder zumindest nicht
‫den Wert haben, den
‫wir erwarten.
‫Und denken Sie daran, dass wir hier zuvor tatsächlich einen regulären
‫Ausdruck verwendet haben, um zu
‫sagen, dass diese Middleware-Funktion auf jede Abfrage
‫angewendet werden soll, die mit find beginnt.
‫Also nicht nur suchen, sondern auch Sachen wie
‫Suchen und Aktualisieren, Suchen und Löschen und alle Abfragen wie diese.
‫Okay, und deshalb verwenden wir einen regulären Ausdruck, um
‫nach Wörtern oder Zeichenfolgen zu suchen, die mit find beginnen.
‫Das ist es, was dieses Symbol hier tut.
‫Und dann beenden Sie den regulären Ausdruck.
‫Also ein ganz einfaches.
‫Dies ist diejenige, die sogar ich schreiben kann, ohne
‫zuerst zu Google zu gehen und zu versuchen,
‫sie dort zu finden.
‫Okay, denken Sie also daran,
‫dass dies eine Abfrage-Middleware ist und daher auf
‫die aktuelle Abfrage verweist.
‫Okay, also lass uns schnell hierher zurückkehren,
‫um zu sehen, wie es funktioniert.
‫Also haben
‫wir hier alle User hier und hier haben wir natürlich eine Suchabfrage.
‫Und jetzt, bevor diese
‫Abfrage tatsächlich ausgeführt wird, möchten wir ihr etwas hinzufügen.
‫Das heißt, wir wollen nur Dokumente finden, bei
‫denen die active-Eigenschaft auf true gesetzt ist.
‫Alles klar, das ist einfach.
‫Hier ist es.
‫Und
‫das also. find und dann natürlich unser Filterobjekt nur Dokumente, bei denen
‫active auf true
‫gesetzt ist.
‫Und das ist es.
‫Aufruf der nächsten Middleware und fertig.
‫Okay, und wenn wir jetzt dieselbe
‫Abfrage durchführen, sollte diese letzte nicht mehr auftauchen, da sie wieder aktiv auf false
‫gesetzt ist.
‫Es wird also nicht mit der Abfrage übereinstimmen,
‫die wir gerade geschrieben haben.
‫Okay, jetzt bekommen wir hier keine Benutzer
‫und ich denke, das liegt daran, dass die anderen nicht
‫explizit die aktive Eigenschaft auf true
‫gesetzt haben.
‫Machen wir also das, was wir in dem anderen Abschnitt taten, in
‫dem wir sagen, dass aktiv nicht falsch sein sollte.
‫Okay, wir verwenden
‫also den ungleich-Operator und der
‫sollte natürlich in einem eigenen Objekt sein.
‫Also nicht gleich false.
‫Okay, das ist hier in diesem Fall also ganz anders.
‫In Ordnung, also sollten jetzt alle
‫Dokumente angezeigt werden, bei denen aktiv nicht gleich false ist, und
‫die anderen beiden sollten jetzt zurück sein.
‫Und tatsächlich sind sie hier.
‫Okay, und so löschen wir grundsätzlich unsere
‫Benutzer, während wir sie effektiv nicht aus der Datenbank löschen.
‫Okay, wir löschen keine Dokumente, sondern markieren
‫sie nur als inaktiv.
‫Okay, lass uns das hier schnell speichern.
‫Aktuellen Benutzer
‫löschen.
‫Großartig und damit haben wir den
‫Authentifizierungs- und Autorisierungsteil dieses Abschnitts tatsächlich
‫abgeschlossen.
‫Also alles was mit diesen Themen zu tun hatte
‫und auch mit Benutzern wie das Aktualisieren und Löschen von Benutzern.
‫Das ist auch ein Teil der
‫Authentifizierung und Autorisierung.
‫Im Rest dieses Abschnitts werden wir
‫nun über Sicherheit sprechen, da dies natürlich auch
‫etwas mit der Authentifizierung zu
‫tun hat.
‫Okay, wir werden über
‫ein paar Best Practices sprechen und
‫einige davon dann auch in unser Projekt implementieren.