﻿1
00:00:01,054 --> 00:00:04,060
‫-: In dieser Vorlesung werden wir dem

2
00:00:04,060 --> 00:00:07,283
‫aktuell eingeloggten Benutzer erlauben, seine Benutzerdaten zu manipulieren.

3
00:00:09,020 --> 00:00:11,910
‫Und jetzt verlassen wir durch die

4
00:00:11,910 --> 00:00:14,880
‫Implementierung von Benutzeraktualisierungen wirklich den Bereich der

5
00:00:14,880 --> 00:00:19,030
‫Authentifizierung und bewegen uns mehr in echte benutzerbezogene Dinge, okay?

6
00:00:19,030 --> 00:00:22,180
‫Anstatt jetzt den Authentifizierungscontroller zu verwenden,

7
00:00:22,180 --> 00:00:24,840
‫implementieren wir diese Aktualisierungsfunktion direkt

8
00:00:24,840 --> 00:00:26,743
‫in ihrem userController.

9
00:00:27,850 --> 00:00:28,970
‫Okay, wir

10
00:00:28,970 --> 00:00:31,710
‫haben also eine Menge Handler, also

11
00:00:31,710 --> 00:00:35,270
‫Routen, die hier nicht wirklich implementiert sind, okay?

12
00:00:35,270 --> 00:00:37,420
‫Aber lassen wir sie vorerst

13
00:00:37,420 --> 00:00:40,553
‫beiseite und erstellen unsere neue Handler-Funktion hier unten.

14
00:00:42,800 --> 00:00:45,143
‫Und dieser wird updateMe heißen.

15
00:00:48,312 --> 00:00:51,260
‫Und wieder heißt es updateMe, weil es zum Aktualisieren

16
00:00:51,260 --> 00:00:53,323
‫des aktuell authentifizierten Benutzers dient.

17
00:00:54,580 --> 00:00:56,620
‫Später werden wir dann auch

18
00:00:56,620 --> 00:01:00,070
‫diese updateUser-Funktion hier implementieren, aber das ist dann

19
00:01:00,070 --> 00:01:03,680
‫für wie ein Administrator, alle Benutzerdaten zu aktualisieren, während

20
00:01:03,680 --> 00:01:07,490
‫der Benutzer selbst zumindest vorerst nur den Namen und die

21
00:01:07,490 --> 00:01:09,293
‫E-Mail-Adresse aktualisieren kann.

22
00:01:12,180 --> 00:01:15,900
‫Also, Anfrage, Antwort und weiter.

23
00:01:17,205 --> 00:01:20,205
‫(Klackern der Tastatur) Und wir tun dies

24
00:01:22,550 --> 00:01:25,800
‫tatsächlich, also aktualisieren die Benutzerdaten auf einem anderen

25
00:01:25,800 --> 00:01:29,180
‫Weg als das Benutzerkennwort zu aktualisieren, denn normalerweise

26
00:01:29,180 --> 00:01:32,040
‫wird dies in einer typischen Webanwendung

27
00:01:32,040 --> 00:01:33,773
‫immer so gemacht.

28
00:01:34,720 --> 00:01:36,370
‫Sie haben also normalerweise einen

29
00:01:36,370 --> 00:01:38,190
‫Ort, an dem Sie Ihr Passwort

30
00:01:38,190 --> 00:01:40,630
‫aktualisieren können, und dann einen anderen Ort, an dem

31
00:01:40,630 --> 00:01:43,700
‫Sie Daten über den Benutzer oder das Konto selbst aktualisieren können.

32
00:01:43,700 --> 00:01:46,993
‫Und hier folgen wir im Grunde einfach diesem Muster.

33
00:01:48,592 --> 00:01:52,410
‫Beginnen wir also noch einmal damit, unsere Schritte zu skizzieren.

34
00:01:52,410 --> 00:01:54,140
‫Und das erste, was wir hier

35
00:01:54,140 --> 00:01:56,090
‫tun möchten, ist, im Grunde einen Fehler

36
00:01:56,090 --> 00:01:58,703
‫zu erstellen, wenn der Benutzer versucht, das Passwort zu aktualisieren.

37
00:02:01,993 --> 00:02:05,737
‫Erstellen Sie also einen Fehler, wenn der

38
00:02:07,330 --> 00:02:10,073
‫Benutzer im Wesentlichen Passwortdaten postet.

39
00:02:13,406 --> 00:02:17,980
‫Aber wenn nicht, müssen wir nur das Benutzerdokument aktualisieren.

40
00:02:20,610 --> 00:02:23,720
‫So einfach genug, und fangen wir natürlich mit dem

41
00:02:23,720 --> 00:02:24,783
‫ersten an.

42
00:02:26,410 --> 00:02:28,180
‫Natürlich wird es eine

43
00:02:28,180 --> 00:02:30,220
‫Stelle geben, an die wir die

44
00:02:30,220 --> 00:02:33,933
‫Daten weitergeben werden, und wenn sich also in dieser Stelle Daten

45
00:02:35,890 --> 00:02:37,929
‫zum Passwort befinden, oder eine Passwortbestätigung...

46
00:02:37,929 --> 00:02:45,350
‫(Tasten klappern) Bestätigen.

47
00:02:45,350 --> 00:02:49,410
‫Nun, in diesem Fall möchten wir sofort zurückkehren und

48
00:02:49,410 --> 00:02:51,833
‫einen neuen Apperror erstellen.

49
00:02:53,920 --> 00:02:57,110
‫Oh, und ich denke, wir haben es hier noch nicht implementiert

50
00:02:57,110 --> 00:02:58,780
‫oder tatsächlich gefordert, also greifen

51
00:02:58,780 --> 00:03:00,663
‫wir es einfach von hier an.

52
00:03:01,660 --> 00:03:02,730
‫Also AppError...

53
00:03:04,360 --> 00:03:05,580
‫Es ist

54
00:03:05,580 --> 00:03:07,400
‫nicht hier, also der userController...

55
00:03:11,550 --> 00:03:13,550
‫Also AppError, los gehts.

56
00:03:15,700 --> 00:03:20,700
‫Also 'Diese Route ist nicht für Passwort-Updates bestimmt.

57
00:03:26,280 --> 00:03:29,623
‫'Bitte verwenden Sie /updateMYPassword. ' Also im Grunde

58
00:03:32,160 --> 00:03:34,960
‫die Route, die wir vorher angegeben haben.

59
00:03:34,960 --> 00:03:36,720
‫Also updateMYPassword.

60
00:03:39,226 --> 00:03:42,753
‫Und dann auch noch ein Code 400 für eine schlechte Anfrage.

61
00:03:46,150 --> 00:03:48,743
‫Und das probieren wir gleich mal aus.

62
00:03:49,921 --> 00:03:51,770
‫Und dafür nur zwei

63
00:03:51,770 --> 00:03:54,133
‫Dinge, zuerst müssen wir eine Antwort

64
00:03:56,230 --> 00:04:00,660
‫zurücksenden, also sagen wir res. status(200) für okay und dann json,

65
00:04:00,660 --> 00:04:01,993
‫fügen Sie

66
00:04:07,130 --> 00:04:09,070
‫den Status als erfolgreich hinzu.

67
00:04:09,070 --> 00:04:11,860
‫Und später werden wir dann auch den aktualisierten Benutzer senden,

68
00:04:11,860 --> 00:04:13,563
‫aber das belassen wir für später.

69
00:04:14,610 --> 00:04:16,840
‫Das ist also die Antwort, und

70
00:04:16,840 --> 00:04:19,893
‫jetzt müssen wir diese Route natürlich auch unserem Benutzer-Router hinzufügen.

71
00:04:21,880 --> 00:04:24,993
‫Das ist natürlich ähnlich wie mein Passwort

72
00:04:26,390 --> 00:04:29,663
‫zu aktualisieren, also Router, und natürlich ein Patch,

73
00:04:32,066 --> 00:04:32,899
‫/updateMe,

74
00:04:35,370 --> 00:04:38,080
‫andererseits ist es eine geschützte Route,

75
00:04:38,080 --> 00:04:42,120
‫sodass nur der aktuell authentifizierte Benutzer die Daten des aktuellen

76
00:04:42,120 --> 00:04:43,603
‫Benutzers aktualisieren kann.

77
00:04:45,420 --> 00:04:48,240
‫Und so ist das alles natürlich sehr sicher,

78
00:04:48,240 --> 00:04:51,540
‫da die ID des Benutzers, der aktualisiert werden soll, aus

79
00:04:51,540 --> 00:04:53,960
‫der Anfrage stammt. user, der

80
00:04:53,960 --> 00:04:58,120
‫hier von dieser Protect-Middleware gesetzt wurde, die wiederum die

81
00:04:58,120 --> 00:05:01,700
‫Idee vom json-webtoken hatte, und da niemand die

82
00:05:01,700 --> 00:05:05,180
‫ID in diesem json-webtoken ändern kann, ohne das

83
00:05:05,180 --> 00:05:07,920
‫Geheimnis zu kennen, wissen wir,

84
00:05:07,920 --> 00:05:11,260
‫dass die ID dann sicher ist deswegen.

85
00:05:11,260 --> 00:05:13,993
‫Aus diesem Grund ist hier alles sicher.

86
00:05:16,342 --> 00:05:18,675
‫Also userController. halte mich auf dem Laufenden.

87
00:05:21,554 --> 00:05:22,471
‫Nun gut...

88
00:05:24,050 --> 00:05:26,003
‫Lassen Sie uns das jetzt testen.

89
00:05:28,830 --> 00:05:30,883
‫Fahren Sie fort und kopieren Sie dies erneut.

90
00:05:34,530 --> 00:05:37,363
‫Und als erstes legen wir die Berechtigung fest.

91
00:05:38,300 --> 00:05:41,520
‫Wieder vom Bearer Token und natürlich

92
00:05:41,520 --> 00:05:43,770
‫mit dieser Umgebungsvariable.

93
00:05:45,788 --> 00:05:48,470
‫Außerdem muss es sich um eine Patch-Anfrage handeln,

94
00:05:48,470 --> 00:05:50,653
‫und wir müssen einen Hauptteil angeben.

95
00:05:53,740 --> 00:05:56,110
‫Und ich möchte damit beginnen, es zu testen,

96
00:05:56,110 --> 00:05:57,930
‫was natürlich diesen Fehler verursacht, und

97
00:05:57,930 --> 00:05:59,653
‫lassen Sie uns ein Passwort und

98
00:06:06,170 --> 00:06:07,613
‫dann einen Namen angeben.

99
00:06:12,620 --> 00:06:15,883
‫Nehmen wir an, dies ist der Name, den wir aktualisieren möchten,

100
00:06:17,030 --> 00:06:18,620
‫also speichern wir ihn hier.

101
00:06:20,911 --> 00:06:23,361
‫Und tatsächlich befindet es sich natürlich im Benutzerordner.

102
00:06:26,960 --> 00:06:28,973
‫Benutzerdaten.

103
00:06:30,810 --> 00:06:32,750
‫Und tatsächlich erstellen wir hier einen neuen

104
00:06:32,750 --> 00:06:35,670
‫Ordner und legen die Dinge, die sich auf die Authentifizierung beziehen,

105
00:06:35,670 --> 00:06:37,123
‫in einen eigenen Ordner.

106
00:06:39,998 --> 00:06:42,960
‫Also hier oben erstellen

107
00:06:42,960 --> 00:06:47,960
‫wir einen neuen Ordner und nennen ihn Authentifizierung.

108
00:06:48,150 --> 00:06:49,460
‫Das ist nicht richtig.

109
00:06:49,460 --> 00:06:52,354
‫AH-DANN-TIKATION.

110
00:06:52,354 --> 00:06:53,554
‫(kichert) Das war's also.

111
00:06:55,480 --> 00:06:58,593
‫Das Passwort hängt also mit der

112
00:06:59,550 --> 00:07:04,530
‫Authentifizierung zusammen, auch mit dem Zurücksetzen des Passworts, dem Vergessen des

113
00:07:04,530 --> 00:07:07,193
‫Passworts, dem Anmelden und Abmelden.

114
00:07:11,078 --> 00:07:13,245
‫Also, schließen wir diese beiden und

115
00:07:14,440 --> 00:07:16,800
‫melden uns jetzt an, oder erstellen

116
00:07:16,800 --> 00:07:18,600
‫wir einen neuen Benutzer.

117
00:07:20,490 --> 00:07:22,043
‫Melden wir uns also

118
00:07:24,170 --> 00:07:28,600
‫hier als normaler Benutzer an, damit wir diese beiden hier loswerden können.

119
00:07:28,600 --> 00:07:33,150
‫Und jetzt rufe ich es einfach an, na ja, teste nochmal, in Ordnung?

120
00:07:33,150 --> 00:07:36,060
‫Und werfen wir einen Blick darauf, welche Benutzer wir derzeit

121
00:07:38,520 --> 00:07:40,100
‫in unserer Datenbank haben.

122
00:07:40,100 --> 00:07:41,950
‫Also haben wir hallo und

123
00:07:41,950 --> 00:07:43,823
‫admin, und verwenden wir jetzt test.

124
00:07:47,400 --> 00:07:49,260
‫Und ich verwende immer wieder das gleiche Passwort, um

125
00:07:49,260 --> 00:07:50,483
‫es wirklich einfach zu machen.

126
00:07:52,310 --> 00:07:55,833
‫In Ordnung, wir müssen auch den Namen angeben, nennen wir

127
00:07:59,530 --> 00:08:01,003
‫ihn hier einfach J.

128
00:08:03,180 --> 00:08:05,570
‫Und jetzt bekommen wir tatsächlich unser Token, und

129
00:08:05,570 --> 00:08:07,120
‫wir sind bereits angemeldet,

130
00:08:07,120 --> 00:08:09,250
‫und wenn wir den Benutzer jetzt aktualisieren,

131
00:08:09,250 --> 00:08:12,083
‫sollte das für diesen Benutzer sein, der gerade angemeldet war.

132
00:08:13,734 --> 00:08:15,770
‫Ich versuche also nicht zu aktualisieren und

133
00:08:15,770 --> 00:08:19,180
‫natürlich ist noch keine Aktualisierung implementiert und das wird also nicht funktionieren.

134
00:08:19,180 --> 00:08:21,820
‫Alles, was ich sehen möchte, ist der Fehler,

135
00:08:21,820 --> 00:08:25,713
‫der auftreten sollte, weil ich diese Kennworteigenschaft hier im Hauptteil angegeben habe.

136
00:08:27,361 --> 00:08:28,720
‫Also probieren wir es aus.

137
00:08:28,720 --> 00:08:31,973
‫Und hier bekommen wir diese Art seltsam aussehender Fehler, aber ich denke,

138
00:08:33,190 --> 00:08:35,700
‫es liegt einfach daran, dass wir die Route hier

139
00:08:35,700 --> 00:08:37,150
‫nicht wirklich aktualisiert haben. Denken

140
00:08:37,150 --> 00:08:40,500
‫Sie also daran, dass ich gerade eine Route kopiert habe, also die URL,

141
00:08:40,500 --> 00:08:42,160
‫und sie einfach hier eingefügt habe.

142
00:08:42,160 --> 00:08:46,610
‫Aber natürlich muss es updateME sein.

143
00:08:46,610 --> 00:08:48,630
‫Versuchen wir es also noch einmal.

144
00:08:48,630 --> 00:08:51,617
‫Und so erhalten wir jetzt tatsächlich den von uns angegebenen Fehler.

145
00:08:51,617 --> 00:08:53,627
‫"Diese Route ist nicht für Passwort-Updates gedacht.

146
00:08:53,627 --> 00:08:56,300
‫"Bitte verwenden Sie /updateMyPassword. „So toll,

147
00:08:56,300 --> 00:08:58,450
‫dieser Teil funktioniert und es

148
00:08:58,450 --> 00:09:01,890
‫funktioniert auch, dass wir authentifiziert werden müssen.

149
00:09:01,890 --> 00:09:05,700
‫Denn sagen wir, wir haben keine Authentifizierung, und

150
00:09:05,700 --> 00:09:08,410
‫sagen wir das: No Auth.

151
00:09:08,410 --> 00:09:10,330
‫Und so versuchen wir es jetzt noch einmal.

152
00:09:10,330 --> 00:09:12,867
‫Und so heißt es tatsächlich: „Sie sind nicht eingeloggt!

153
00:09:12,867 --> 00:09:15,157
‫"Bitte loggen Sie sich ein, um Zugang zu erhalten. "Also nur

154
00:09:17,300 --> 00:09:19,800
‫um Ihnen zu beweisen, dass unsere Authentifizierung

155
00:09:19,800 --> 00:09:21,853
‫auch hier ihren Job macht.

156
00:09:23,260 --> 00:09:25,450
‫Aber natürlich wollen wir unseren Inhaber-Token,

157
00:09:25,450 --> 00:09:27,933
‫und jetzt bekommen wir diesen anderen Fehler.

158
00:09:29,990 --> 00:09:32,790
‫Großartig, also lassen Sie uns

159
00:09:32,790 --> 00:09:36,943
‫jetzt den Rest der Funktionalität für den updateMe-Handler implementieren.

160
00:09:38,170 --> 00:09:40,970
‫Aktualisieren Sie also das Benutzerdokument, und wir könnten versuchen, dies

161
00:09:40,970 --> 00:09:43,910
‫mit dem Benutzer zu tun. sicher.

162
00:09:43,910 --> 00:09:46,860
‫Also wie zuvor, im Grunde den Benutzer dazu bringen,

163
00:09:46,860 --> 00:09:49,430
‫die Eigenschaften zu aktualisieren und dann am Ende

164
00:09:49,430 --> 00:09:51,030
‫das Dokument zu speichern.

165
00:09:51,030 --> 00:09:53,500
‫Das Problem dabei ist jedoch, dass einige

166
00:09:53,500 --> 00:09:56,320
‫Felder erforderlich sind, die wir nicht aktualisieren,

167
00:09:56,320 --> 00:09:57,680
‫und deshalb werden

168
00:09:57,680 --> 00:09:59,490
‫wir einige Fehler machen.

169
00:09:59,490 --> 00:10:01,330
‫Und um es Ihnen schnell zu demonstrieren, lassen

170
00:10:01,330 --> 00:10:02,530
‫Sie mich das tatsächlich tun.

171
00:10:03,430 --> 00:10:06,403
‫Okay, also sehr schnell, den Benutzer hierher zu bekommen.

172
00:10:09,490 --> 00:10:14,490
‫Also findbyId, also anfordern. Benutzer, wie wir bereits wissen, . Ich würde.

173
00:10:17,540 --> 00:10:22,540
‫Und dann sagen wir, Benutzer. name = 'Jonas' und dann auf

174
00:10:25,582 --> 00:10:27,297
‫Benutzer warten. speichern.

175
00:10:30,660 --> 00:10:33,763
‫Aber Sie sehen wieder, dass dies uns dann einen Fehler geben wird.

176
00:10:35,277 --> 00:10:37,320
‫Aber vorerst deklarieren wir es natürlich

177
00:10:37,320 --> 00:10:38,763
‫auch als asynchrone Funktion.

178
00:10:45,700 --> 00:10:47,970
‫Und alles klar.

179
00:10:47,970 --> 00:10:49,690
‫Lassen Sie es uns jetzt

180
00:10:49,690 --> 00:10:52,780
‫testen, aber wir sollten jetzt mit einem Fehler rechnen.

181
00:10:52,780 --> 00:10:55,113
‫Also lasst uns diesen natürlich

182
00:10:58,910 --> 00:11:02,560
‫loswerden, und tatsächlich bekommen wir: "Bitte bestätigen Sie Ihr Passwort".

183
00:11:02,560 --> 00:11:06,380
‫Das liegt daran, dass passwordConfirm ein Pflichtfeld ist, aber wir

184
00:11:06,380 --> 00:11:08,763
‫haben es natürlich nicht angegeben.

185
00:11:09,770 --> 00:11:12,940
‫Und so ist die sichere Methode in diesem Fall

186
00:11:12,940 --> 00:11:14,760
‫nicht wirklich die richtige Option.

187
00:11:14,760 --> 00:11:16,560
‫Stattdessen können wir

188
00:11:16,560 --> 00:11:19,453
‫jetzt tatsächlich findById und update verwenden.

189
00:11:20,540 --> 00:11:23,560
‫Das konnten wir also aus all den Gründen, die ich

190
00:11:23,560 --> 00:11:25,970
‫Ihnen inzwischen mehrfach erläutert habe, nicht gebrauchen.

191
00:11:25,970 --> 00:11:28,460
‫Da wir es aber jetzt nicht

192
00:11:28,460 --> 00:11:32,380
‫mit Passwörtern, sondern nur mit diesen nicht sensiblen Daten wie Name oder

193
00:11:32,380 --> 00:11:36,263
‫E-Mail zu tun haben, können wir jetzt findById und update verwenden.

194
00:11:38,810 --> 00:11:40,343
‫Also, lass uns das loswerden.

195
00:11:42,380 --> 00:11:46,040
‫Nennen wir es hier auch updateUser.

196
00:11:46,040 --> 00:11:48,950
‫Und dann müssen wir hier nicht nur die ID übergeben,

197
00:11:48,950 --> 00:11:51,400
‫sondern auch die Daten, die aktualisiert werden sollen,

198
00:11:51,400 --> 00:11:53,040
‫und dann einige Optionen.

199
00:11:53,040 --> 00:11:56,303
‫Also die Daten, nennen wir es hier jetzt x, und

200
00:11:57,650 --> 00:11:59,140
‫ich sage Ihnen gleich

201
00:11:59,140 --> 00:12:02,250
‫warum, und dann die Optionen, die wir übergeben möchten.

202
00:12:02,250 --> 00:12:04,180
‫Und das ist genau wie zuvor,

203
00:12:04,180 --> 00:12:07,240
‫die neue Option wird auf true gesetzt, sodass das

204
00:12:07,240 --> 00:12:09,090
‫neue Objekt zurückgegeben wird,

205
00:12:09,090 --> 00:12:12,033
‫also im Grunde das aktualisierte Objekt anstelle des alten.

206
00:12:12,880 --> 00:12:16,393
‫Und die runValidators werden auch auf true gesetzt.

207
00:12:17,670 --> 00:12:22,000
‫Denn tatsächlich wollen wir, dass die Modelle unser Dokument validieren.

208
00:12:22,000 --> 00:12:25,490
‫Wenn wir beispielsweise eine ungültige E-Mail-Adresse eingeben, sollte diese vom

209
00:12:25,490 --> 00:12:28,490
‫Validator abgefangen werden und einen Fehler zurückgeben.

210
00:12:29,770 --> 00:12:34,770
‫Warum setze ich nun x hier ein und frage nicht einfach nach. Karosserie?

211
00:12:35,040 --> 00:12:37,510
‫Nun, das liegt daran, dass wir eigentlich

212
00:12:37,510 --> 00:12:40,010
‫nicht alles aktualisieren möchten, was sich im

213
00:12:40,010 --> 00:12:43,130
‫Körper befindet, weil der Benutzer beispielsweise die Rolle in

214
00:12:43,130 --> 00:12:44,513
‫den Körper einfügt.

215
00:12:46,550 --> 00:12:51,550
‫Wir könnten Körper haben. rolle beispielsweise auf admin gesetzt,

216
00:12:52,510 --> 00:12:55,040
‫so dass dann jeder Benutzer die

217
00:12:55,040 --> 00:12:57,860
‫Rolle ändern kann, z. B. auf Administrator.

218
00:12:57,860 --> 00:13:00,200
‫Und das darf natürlich nicht erlaubt sein.

219
00:13:00,200 --> 00:13:02,850
‫Oder der Benutzer könnte auch seinen Reset-Token

220
00:13:02,850 --> 00:13:05,350
‫ändern oder wenn dieser Reset-Token abläuft,

221
00:13:05,350 --> 00:13:08,290
‫und all das sollte natürlich nicht erlaubt sein.

222
00:13:08,290 --> 00:13:10,440
‫Daher wäre es natürlich ein großer

223
00:13:10,440 --> 00:13:12,520
‫Fehler, so etwas zu tun.

224
00:13:12,520 --> 00:13:14,773
‫Und deshalb müssen wir sicherstellen, dass

225
00:13:14,773 --> 00:13:16,640
‫das Objekt, das wir hier

226
00:13:16,640 --> 00:13:19,460
‫übergeben, also wieder das Objekt, das die zu

227
00:13:19,460 --> 00:13:20,860
‫aktualisierenden Daten enthält,

228
00:13:20,860 --> 00:13:23,540
‫nur Name und E-Mail enthält, da dies

229
00:13:23,540 --> 00:13:25,940
‫im Moment die einzigen Felder sind, die

230
00:13:25,940 --> 00:13:27,623
‫wir aktualisieren möchten .

231
00:13:28,640 --> 00:13:31,150
‫Und im Grunde wollen wir den Body so

232
00:13:31,150 --> 00:13:34,370
‫filtern, dass er am Ende nur Name und E-Mail enthält

233
00:13:34,370 --> 00:13:35,610
‫und sonst nichts.

234
00:13:35,610 --> 00:13:38,620
‫Wenn der Benutzer also versucht, die Rolle zu

235
00:13:38,620 --> 00:13:40,250
‫ändern, wird das herausgefiltert,

236
00:13:40,250 --> 00:13:43,483
‫damit es nie den Weg in unsere Datenbank findet.

237
00:13:44,769 --> 00:13:48,400
‫Was wir also tun wollen, ist im Grunde eine Variable zu

238
00:13:48,400 --> 00:13:49,750
‫erstellen und sagen

239
00:13:52,400 --> 00:13:56,240
‫wir Filterkörper, und dann werden wir gleich eine Funktion erstellen, aber lass

240
00:13:56,240 --> 00:13:58,620
‫uns sie hier schon verwenden, damit du

241
00:13:58,620 --> 00:14:00,420
‫siehst, wie es funktionieren wird.

242
00:14:01,450 --> 00:14:03,250
‫Und dann übergeben wir

243
00:14:03,250 --> 00:14:05,850
‫hier die Daten, also das Objekt, das

244
00:14:05,850 --> 00:14:09,890
‫wir filtern möchten, also req. body, weil dort alle Daten

245
00:14:09,890 --> 00:14:12,440
‫sind, und dann übergeben wir ein paar Argumente.

246
00:14:12,440 --> 00:14:15,170
‫Eines für jedes der Felder, die wir im Objekt

247
00:14:15,170 --> 00:14:16,183
‫behalten möchten.

248
00:14:17,950 --> 00:14:20,343
‫Wir möchten also das Feld namens name

249
00:14:21,400 --> 00:14:23,653
‫und das Feld email beibehalten.

250
00:14:25,120 --> 00:14:28,790
‫Und wieder, etwas später können wir hier weitere Felder hinzufügen,

251
00:14:28,790 --> 00:14:30,910
‫zum Beispiel später können wir dem

252
00:14:30,910 --> 00:14:32,850
‫Benutzer erlauben, ein Bild hochzuladen.

253
00:14:32,850 --> 00:14:35,709
‫Und das müssen wir natürlich auch in

254
00:14:35,709 --> 00:14:37,220
‫der Datenbank aktualisieren.

255
00:14:37,220 --> 00:14:39,010
‫Aber im Moment wollen wir

256
00:14:39,010 --> 00:14:43,343
‫nur den Namen und die E-Mail-Adresse im Körper behalten und den Rest herausfiltern.

257
00:14:45,410 --> 00:14:48,067
‫Und hier verwenden wir jetzt natürlich

258
00:14:49,730 --> 00:14:51,573
‫filterBody anstelle von x.

259
00:14:54,400 --> 00:14:57,200
‫Was wir jetzt tun müssen, ist diese

260
00:14:57,200 --> 00:15:00,833
‫Funktion zu implementieren, die sich um das Filtern des Objekts kümmert.

261
00:15:02,640 --> 00:15:03,893
‫Also machen wir das hier.

262
00:15:09,151 --> 00:15:09,984
‫FilterObj,

263
00:15:12,350 --> 00:15:15,050
‫das ein Objekt und dann

264
00:15:15,050 --> 00:15:18,853
‫die restlichen Parameter für alle zulässigen Felder aufnimmt.

265
00:15:21,320 --> 00:15:23,670
‫Dadurch wird dann im Grunde

266
00:15:23,670 --> 00:15:27,203
‫ein Array erstellt, das alle von uns übergebenen Argumente enthält.

267
00:15:28,690 --> 00:15:31,750
‫Also im Grunde wurden die nach diesem ersten weitergegeben.

268
00:15:31,750 --> 00:15:36,750
‫In diesem Fall handelt es sich also um ein Array, das Name und E-Mail enthält.

269
00:15:39,610 --> 00:15:41,260
‫Was wir jetzt also tun

270
00:15:41,260 --> 00:15:44,560
‫müssen, ist im Grunde das Objekt zu durchlaufen und für jedes Element zu prüfen,

271
00:15:44,560 --> 00:15:46,240
‫ob es eines der erlaubten Felder ist,

272
00:15:46,240 --> 00:15:49,110
‫und wenn ja, fügen Sie es einfach zu einem neuen Objekt hinzu,

273
00:15:49,110 --> 00:15:51,160
‫das wir dann am Ende zurückgeben werden .

274
00:15:51,160 --> 00:15:53,840
‫Und wahrscheinlich gibt es effizientere oder bessere Möglichkeiten, dies

275
00:15:53,840 --> 00:15:55,140
‫zu implementieren, aber lass

276
00:15:55,140 --> 00:15:56,990
‫es uns hier ganz schnell machen.

277
00:15:58,810 --> 00:16:00,790
‫Also werden wir das

278
00:16:00,790 --> 00:16:04,893
‫Objekt loopen, indem wir Object sagen. Schlüssel des Objekts, das wir übergeben.

279
00:16:05,940 --> 00:16:08,210
‫Das ist also eine der einfachen Möglichkeiten, ein

280
00:16:08,210 --> 00:16:09,883
‫Objekt in JavaScript zu durchlaufen.

281
00:16:12,612 --> 00:16:15,710
‫Das hier gibt also im Grunde ein Array zurück,

282
00:16:15,710 --> 00:16:17,560
‫das alle Schlüsselnamen enthält,

283
00:16:17,560 --> 00:16:19,850
‫also die Feldnamen dieses Objekts, und

284
00:16:19,850 --> 00:16:21,713
‫dann können wir sie durchlaufen.

285
00:16:22,570 --> 00:16:24,023
‫Dann unsere Callback-Funktion.

286
00:16:24,960 --> 00:16:27,933
‫Und für jedes Element werden wir dies tun.

287
00:16:29,080 --> 00:16:32,680
‫Wenn also das zulässige Feldarray das

288
00:16:33,680 --> 00:16:38,680
‫aktuelle Element enthält, also den aktuellen Feldnamen, möchten wir das

289
00:16:38,840 --> 00:16:41,310
‫einem neuen Objekt hinzufügen.

290
00:16:41,310 --> 00:16:43,533
‫Lassen Sie uns das hier schnell

291
00:16:44,580 --> 00:16:47,340
‫erstellen, also const newObj, das vorerst leer ist,

292
00:16:48,540 --> 00:16:50,260
‫und am Ende

293
00:16:50,260 --> 00:16:53,010
‫ist es dasjenige, das wir zurückgeben werden.

294
00:16:54,820 --> 00:16:57,500
‫Also neuObj.

295
00:16:57,500 --> 00:17:00,770
‫Wenn das aktuelle Feld also eines der zulässigen

296
00:17:00,770 --> 00:17:05,770
‫Felder ist, dann sollte newObj mit dem Feldnamen des aktuellen Felds gleich

297
00:17:07,260 --> 00:17:10,970
‫dem sein, was sich im Objekt im aktuellen Element

298
00:17:10,970 --> 00:17:13,743
‫befindet, also dem aktuellen Feldnamen.

299
00:17:15,330 --> 00:17:17,593
‫Also nicht, wenn das etwas

300
00:17:18,460 --> 00:17:20,740
‫verwirrend aussieht, das ist wieder nur

301
00:17:20,740 --> 00:17:24,450
‫Standard-JavaScript, es hat nichts mit JS oder eXpress oder ähnlichem

302
00:17:24,450 --> 00:17:25,593
‫zu tun.

303
00:17:26,810 --> 00:17:29,510
‫Alles, was wir hier tun, ist also, im Grunde

304
00:17:29,510 --> 00:17:32,090
‫alle Felder des Objekts zu durchlaufen und dann für

305
00:17:32,090 --> 00:17:33,710
‫jedes Feld zu prüfen,

306
00:17:33,710 --> 00:17:35,700
‫ob es eines der zulässigen Felder ist.

307
00:17:35,700 --> 00:17:39,300
‫Und wenn ja, dann erstellen wir im neuen Objekt ein neues

308
00:17:39,300 --> 00:17:40,610
‫Feld, natürlich mit

309
00:17:40,610 --> 00:17:43,700
‫dem gleichen Namen, also immer noch name element, mit

310
00:17:43,700 --> 00:17:46,317
‫genau dem gleichen Wert wie im Originalobjekt.

311
00:17:46,317 --> 00:17:49,193
‫Und am Ende geben wir das natürlich zurück.

312
00:17:51,880 --> 00:17:55,323
‫Und so sollte das hier jetzt alles funktionieren.

313
00:17:56,260 --> 00:17:58,520
‫Dann müssen wir am Ende

314
00:17:58,520 --> 00:18:01,603
‫nur noch diesen aktualisierten Benutzer an den Client senden.

315
00:18:03,040 --> 00:18:04,083
‫Also, Benutzer.

316
00:18:06,120 --> 00:18:11,120
‫Jetzt müssen wir den udatedUser dann natürlich hier ablegen,

317
00:18:11,160 --> 00:18:15,400
‫erneut speichern, und jetzt sollte es funktionieren.

318
00:18:15,400 --> 00:18:17,877
‫Sehen Sie wirklich, was wir hier gemacht haben. .

319
00:18:21,310 --> 00:18:24,003
‫aktualisieren Sie den

320
00:18:25,450 --> 00:18:30,450
‫Benutzer zuletzt, und zuvor haben wir unerwünschte

321
00:18:34,490 --> 00:18:39,303
‫Feldnamen herausgefiltert, die nicht aktualisiert werden dürfen.

322
00:18:40,758 --> 00:18:42,460
‫Also versuchen wir es jetzt.

323
00:18:42,460 --> 00:18:46,423
‫Und dieser Benutzer hier ist ein normaler Benutzer, also haben wir ihn

324
00:18:47,780 --> 00:18:49,150
‫gerade erstellt, erinnern Sie

325
00:18:49,150 --> 00:18:50,813
‫sich mit dem Namen J.

326
00:18:51,920 --> 00:18:55,100
‫Werfen wir also kurz einen Blick auf Compass.

327
00:18:56,900 --> 00:19:00,870
‫Es ist also ein normaler Benutzer mit dem Namen J.

328
00:19:00,870 --> 00:19:02,450
‫Also aktualisieren wir nun

329
00:19:02,450 --> 00:19:05,160
‫den Namen und versuchen auch die Rolle zu

330
00:19:05,160 --> 00:19:07,460
‫aktualisieren, was wiederum nicht erlaubt ist.

331
00:19:07,460 --> 00:19:11,090
‫Aber um zu sehen, ob unser Code funktioniert, probieren wir es aus.

332
00:19:11,090 --> 00:19:14,470
‫Der Name ist also bereits vorhanden, und nehmen wir an,

333
00:19:14,470 --> 00:19:15,970
‫wir sind ein böswilliger

334
00:19:15,970 --> 00:19:19,313
‫Benutzer, der versucht, unsere Rolle in Admin zu ändern.

335
00:19:20,620 --> 00:19:23,150
‫Also, ich denke, alles ist richtig,

336
00:19:23,150 --> 00:19:25,190
‫also lass uns das

337
00:19:25,190 --> 00:19:28,520
‫jetzt senden, und tatsächlich ist hier unser aktualisiertes Objekt.

338
00:19:28,520 --> 00:19:32,150
‫Wir bekommen also unseren neuen Namen, der Jonas Schmedtmann ist, und

339
00:19:32,150 --> 00:19:35,250
‫dann die Rolle, die immer noch Benutzer ist.

340
00:19:35,250 --> 00:19:37,913
‫Die Rolle wurde nicht auf Admin aktualisiert.

341
00:19:39,460 --> 00:19:42,380
‫Perfekt. Genau das wollten wir.

342
00:19:42,380 --> 00:19:46,230
‫Also, speichern Sie das und gehen wir zurück und tatsächlich

343
00:19:46,230 --> 00:19:49,513
‫haben wir damit gerade dieses Video beendet.

344
00:19:50,590 --> 00:19:53,770
‫Als nächstes implementieren wir dann eine Funktionalität zum

345
00:19:53,770 --> 00:19:55,913
‫Löschen des aktuellen Benutzers.

346
00:19:56,890 --> 00:20:00,730
‫Also haben wir an der Aktualisierung gearbeitet, als nächstes wollen wir es einem

347
00:20:00,730 --> 00:20:03,970
‫Benutzer ermöglichen, sich grundsätzlich selbst zu löschen, wenn er nicht

348
00:20:03,970 --> 00:20:06,143
‫mehr Teil unserer Anwendung sein möchte.

