﻿1
00:00:01,290 --> 00:00:03,730
‫Kursleiter: In Ordnung, also lassen Sie uns nun

2
00:00:03,730 --> 00:00:06,670
‫diese neuen Benutzer erstellen, basierend auf dem Modell, das wir

3
00:00:06,670 --> 00:00:09,093
‫gerade im letzten Video implementiert haben.

4
00:00:10,630 --> 00:00:14,180
‫Wir werden also die meisten benutzerbezogenen Dinge tun,

5
00:00:14,180 --> 00:00:17,350
‫wie das Erstellen neuer Benutzer, das Anmelden

6
00:00:17,350 --> 00:00:20,933
‫von Benutzern oder das Aktualisieren von Passwörtern im Authentifizierungs-Controller.

7
00:00:22,190 --> 00:00:25,800
‫Alle Dinge, die wirklich mit Authentifizierung zu tun haben, befinden

8
00:00:25,800 --> 00:00:28,550
‫sich also nicht in dem Benutzer-Controller, den

9
00:00:28,550 --> 00:00:30,250
‫wir zuvor erstellt

10
00:00:30,250 --> 00:00:33,313
‫haben, sondern wir werden stattdessen einen Authentifizierungs-Controller erstellen.

11
00:00:35,070 --> 00:00:36,990
‫Alle Funktionen, die sich auf

12
00:00:36,990 --> 00:00:38,943
‫die Authentifizierung beziehen, werden also hier abgelegt.

13
00:00:41,860 --> 00:00:44,300
‫Und das wird später etwas mehr Sinn machen,

14
00:00:44,300 --> 00:00:46,530
‫wenn wir dann alle Funktionen verwenden, die

15
00:00:46,530 --> 00:00:48,103
‫ich hier einfügen werde.

16
00:00:49,500 --> 00:00:51,560
‫Und jetzt müssen wir

17
00:00:51,560 --> 00:00:53,983
‫als erstes unseren Benutzer importieren, also

18
00:00:57,870 --> 00:01:00,610
‫natürlich unser Benutzermodell, und das ist

19
00:01:00,610 --> 00:01:05,610
‫eine Ebene höher, dann sollte es in den Modellen und dann im

20
00:01:07,250 --> 00:01:08,577
‫Benutzermodell sein.

21
00:01:09,450 --> 00:01:10,283
‫Gut.

22
00:01:12,490 --> 00:01:16,500
‫Lassen Sie uns also unseren allerersten Controller erstellen und exportieren.

23
00:01:16,500 --> 00:01:18,347
‫Und ich werde dies eine Anmeldung nennen.

24
00:01:20,020 --> 00:01:22,990
‫Sie sehen also, dass ich es nicht "Benutzer erstellen" nenne,

25
00:01:22,990 --> 00:01:25,060
‫wie ich es in einem Tour-Controller

26
00:01:25,060 --> 00:01:27,300
‫getan habe, sondern ich nenne es wirklich "signup",

27
00:01:27,300 --> 00:01:29,700
‫weil dies der Name ist, der im Zusammenhang

28
00:01:29,700 --> 00:01:31,913
‫mit der Authentifizierung etwas mehr Bedeutung hat.

29
00:01:33,360 --> 00:01:36,510
‫Es wird also natürlich eine asynchrone Funktion sein,

30
00:01:36,510 --> 00:01:38,973
‫weil wir einige Datenbankoperationen durchführen werden.

31
00:01:42,190 --> 00:01:44,913
‫Dann anfordern, antworten und wie immer

32
00:01:46,000 --> 00:01:49,650
‫weiter, und dann legen wir hier den neuen Benutzer an.

33
00:01:49,650 --> 00:01:52,573
‫Das ist also sehr ähnlich zu dem, was wir vorher gemacht haben.

34
00:01:53,460 --> 00:01:55,590
‫Diesmal heißt es also newUser, und erinnern

35
00:01:55,590 --> 00:01:57,070
‫Sie sich dann daran,

36
00:01:57,070 --> 00:02:00,090
‫wie wir ein neues Dokument basierend auf einem Modell erstellen.

37
00:02:00,090 --> 00:02:02,210
‫Also verwenden wir natürlich den

38
00:02:02,210 --> 00:02:04,610
‫Modellnamen, der in diesem Fall User

39
00:02:04,610 --> 00:02:07,163
‫ist, und dann verwenden wir die create-Methode.

40
00:02:08,740 --> 00:02:10,020
‫Und dann müssen wir

41
00:02:10,020 --> 00:02:12,150
‫nur noch ein Objekt mit den Daten

42
00:02:12,150 --> 00:02:14,353
‫übergeben, aus denen der Benutzer erstellt werden soll.

43
00:02:15,380 --> 00:02:20,093
‫Und so wie zuvor sind diese Daten tatsächlich in req. Karosserie.

44
00:02:21,070 --> 00:02:23,430
‫All dies wird also ein Versprechen

45
00:02:23,430 --> 00:02:25,920
‫zurückgeben, und das müssen wir abwarten, und das

46
00:02:25,920 --> 00:02:28,683
‫ist der Grund, warum dies eine asynchrone Funktion ist.

47
00:02:30,150 --> 00:02:32,403
‫Und ich sehe hier oben, wir brauchen Exporte.

48
00:02:34,374 --> 00:02:36,740
‫Und jetzt im nächsten Schritt werden

49
00:02:36,740 --> 00:02:40,310
‫wir diesen neuen Benutzer dann tatsächlich an den Client senden.

50
00:02:40,310 --> 00:02:45,283
‫Also res. status, der 201 für erstellt ist,

51
00:02:46,720 --> 00:02:48,453
‫und dann unser JSON-Objekt.

52
00:02:52,160 --> 00:02:53,763
‫Das ist also wieder

53
00:02:55,010 --> 00:02:58,250
‫Erfolg, und dann unsere Dateneigenschaft, die hier wieder

54
00:02:58,250 --> 00:02:59,690
‫Umschlag genannt

55
00:02:59,690 --> 00:03:03,510
‫wird, also eine Eigenschaft, die die Daten selbst enthält.

56
00:03:03,510 --> 00:03:05,770
‫Und die Daten heißen jetzt user,

57
00:03:05,770 --> 00:03:07,723
‫während sie vorher Tour hießen,

58
00:03:09,105 --> 00:03:12,323
‫und was wir hier einsenden werden, ist der newUser.

59
00:03:13,890 --> 00:03:16,270
‫Speichern Sie es, und bevor Sie dies

60
00:03:16,270 --> 00:03:18,810
‫ausprobieren, denken Sie daran, dass dies eine asynchrone Funktion

61
00:03:18,810 --> 00:03:21,393
‫ist und wir hier über die Fehlerbehandlung nachdenken müssen.

62
00:03:22,500 --> 00:03:24,470
‫Was müssen wir hier also tun?

63
00:03:24,470 --> 00:03:26,840
‫Nun, wir müssen diese gesamte Funktion, die

64
00:03:26,840 --> 00:03:29,770
‫wir gerade erstellt haben, in die catchAsync-Funktion einschließen, die wir

65
00:03:29,770 --> 00:03:31,570
‫im letzten Abschnitt erstellt haben.

66
00:03:32,810 --> 00:03:37,160
‫Denken Sie also daran, wie wir das im tourController gemacht

67
00:03:37,160 --> 00:03:39,640
‫haben, wo alle asynchronen Funktionen

68
00:03:39,640 --> 00:03:42,740
‫in diese catchAsync-Funktion eingebunden sind, damit wir

69
00:03:42,740 --> 00:03:43,900
‫den try-catch-Block

70
00:03:43,900 --> 00:03:47,640
‫hier nicht in jede einzelne Funktion schreiben müssen.

71
00:03:47,640 --> 00:03:49,440
‫Erinnern Sie sich an den letzten Abschnitt?

72
00:03:50,410 --> 00:03:52,450
‫Also werde ich

73
00:03:52,450 --> 00:03:55,963
‫eigentlich weitermachen und diese Anforderungserklärung hier kopieren.

74
00:04:00,190 --> 00:04:02,353
‫Also manchmal ein

75
00:04:03,220 --> 00:04:07,253
‫bisschen faul, keine Lust, immer wieder den

76
00:04:08,360 --> 00:04:12,570
‫gleichen Code zu schreiben, also catchAsync, und dann

77
00:04:12,570 --> 00:04:16,303
‫müssen wir das hier am Ende schließen.

78
00:04:18,793 --> 00:04:20,220
‫Und jetzt müssen

79
00:04:20,220 --> 00:04:22,393
‫wir nur noch die Route implementieren,

80
00:04:22,393 --> 00:04:25,440
‫damit dieser Signup-Handler hier dann aufgerufen werden kann.

81
00:04:25,440 --> 00:04:27,650
‫Kommen wir also zu unseren

82
00:04:27,650 --> 00:04:31,400
‫userRoutes, die wir eigentlich schon vor einiger Zeit erstellt haben, und

83
00:04:31,400 --> 00:04:33,923
‫wir haben hier schon einige Routen drin.

84
00:04:34,930 --> 00:04:37,653
‫Aber eigentlich werde ich hier jetzt einen neuen erstellen.

85
00:04:43,990 --> 00:04:46,700
‫Und wie ich gleich zu Beginn dieses Videos erwähnt

86
00:04:46,700 --> 00:04:48,700
‫habe, unterscheidet sich die Benutzerressource ein wenig

87
00:04:48,700 --> 00:04:50,290
‫von allen anderen Ressourcen.

88
00:04:50,290 --> 00:04:52,730
‫Auch hier, weil es wirklich mit allem zu tun hat,

89
00:04:52,730 --> 00:04:54,680
‫was mit der Authentifizierung zu tun hat.

90
00:04:54,680 --> 00:04:57,010
‫Und so haben wir dafür einen

91
00:04:57,010 --> 00:05:00,410
‫anderen Controller, also den authController, die Funktionsnamen haben auch

92
00:05:00,410 --> 00:05:02,110
‫andere Namen, und

93
00:05:02,110 --> 00:05:05,143
‫so haben wir eigentlich auch eine spezielle Route.

94
00:05:08,540 --> 00:05:11,770
‫Sagen wir Router. post, und dann

95
00:05:11,770 --> 00:05:15,313
‫erstellen wir eine Route für die Anmeldung, also /signup, und

96
00:05:18,450 --> 00:05:20,270
‫dann verwenden wir hier die

97
00:05:20,270 --> 00:05:22,370
‫Funktion, die wir gerade erstellt haben.

98
00:05:23,260 --> 00:05:24,800
‫Bevor wir das

99
00:05:24,800 --> 00:05:27,963
‫tun können, müssen wir natürlich diesen Authentifizierungscontroller benötigen.

100
00:05:29,520 --> 00:05:32,040
‫Lassen Sie uns diese Zeile hier

101
00:05:32,040 --> 00:05:37,040
‫einfach duplizieren und user an zwei Stellen ersetzen, und hier haben wir

102
00:05:37,440 --> 00:05:39,713
‫unseren authController, und verwenden wir

103
00:05:41,416 --> 00:05:42,716
‫ihn jetzt. Anmelden.

104
00:05:44,340 --> 00:05:45,173
‫Wie Sie

105
00:05:47,050 --> 00:05:49,790
‫sehen, ist die Anmeldung wirklich ein besonderer Endpunkt.

106
00:05:49,790 --> 00:05:51,410
‫Es passt nicht zu der REST-Architektur, über

107
00:05:51,410 --> 00:05:53,560
‫die wir zuvor gesprochen haben, weil es in diesem

108
00:05:53,560 --> 00:05:55,070
‫Fall nicht viel Sinn macht.

109
00:05:55,070 --> 00:05:57,920
‫Denken Sie also daran, wie wir gesagt

110
00:05:57,920 --> 00:06:00,030
‫haben, dass wir in

111
00:06:00,030 --> 00:06:02,690
‫einigen speziellen Fällen natürlich andere Endpunkte erstellen

112
00:06:02,690 --> 00:06:07,690
‫können, die nicht zu 100% zu der hier im Wesentlichen implementierten REST-Philosophie passen.

113
00:06:07,980 --> 00:06:09,853
‫Dies folgt hier natürlich

114
00:06:10,950 --> 00:06:15,040
‫zu 100% der REST-Philosophie, bei der der Name der URL nichts

115
00:06:15,040 --> 00:06:17,790
‫mit der tatsächlich ausgeführten Aktion zu tun hat.

116
00:06:17,790 --> 00:06:19,950
‫Hier oben ist es natürlich so.

117
00:06:19,950 --> 00:06:22,080
‫Der Name der Route lautet also

118
00:06:22,080 --> 00:06:23,960
‫Anmeldung, weil wir Benutzer anmelden.

119
00:06:23,960 --> 00:06:25,953
‫Und auch hier unten haben wir all

120
00:06:26,880 --> 00:06:28,760
‫diese verschiedenen HTTP-Warps implementiert, aber hier

121
00:06:28,760 --> 00:06:30,940
‫für die Anmeldung brauchen wir wirklich nur POST.

122
00:06:31,810 --> 00:06:34,773
‫Wir können also keine Daten von der Anmeldung abrufen oder

123
00:06:35,668 --> 00:06:38,520
‫eine Anmeldung nicht patchen, also aktualisieren Sie sie nicht.

124
00:06:38,520 --> 00:06:41,810
‫Das macht nicht wirklich Sinn, und in diesem Fall wollen

125
00:06:41,810 --> 00:06:43,170
‫wir nur eine

126
00:06:43,170 --> 00:06:45,140
‫Route für die Anmeldung haben, auf

127
00:06:45,140 --> 00:06:47,160
‫der wir nur Daten POST können.

128
00:06:47,160 --> 00:06:48,953
‫Denn auch hier macht es

129
00:06:50,170 --> 00:06:52,370
‫nur Sinn, tatsächlich Daten an diese Route zu

130
00:06:52,370 --> 00:06:54,740
‫senden, damit dann der neue Benutzer angelegt wird.

131
00:06:54,740 --> 00:06:57,820
‫Und wir werden verschiedene Routen haben, die dieser ähnlich

132
00:06:57,820 --> 00:07:00,240
‫sind, z. B. für die Anmeldung

133
00:07:00,240 --> 00:07:03,820
‫oder das Zurücksetzen des Passworts und alle möglichen Dinge dieser Art.

134
00:07:03,820 --> 00:07:06,003
‫Und wir werden diese

135
00:07:07,163 --> 00:07:10,150
‫Routen auch hier behalten, also die in einem

136
00:07:10,150 --> 00:07:12,930
‫eher REST-Format, denn es gibt auch die

137
00:07:12,930 --> 00:07:15,180
‫Möglichkeit, dass ein Systemadministrator alle Benutzer

138
00:07:15,180 --> 00:07:18,370
‫basierend auf ihrer ID aktualisiert oder löscht oder erhält.

139
00:07:18,370 --> 00:07:21,423
‫Aber darum kümmern wir uns später, denn jetzt wollen wir

140
00:07:22,620 --> 00:07:24,590
‫nur alle Funktionen implementieren, die sich mit

141
00:07:24,590 --> 00:07:25,890
‫der Authentifizierung beschäftigen.

142
00:07:25,890 --> 00:07:28,970
‫Also grundsätzlich Funktionen, die nur für den Nutzer

143
00:07:28,970 --> 00:07:30,620
‫selbst relevant sind.

144
00:07:30,620 --> 00:07:33,340
‫Es ist also kein Admin, der einen Benutzer

145
00:07:33,340 --> 00:07:36,180
‫anmeldet, oder es ist kein Admin, der einen Benutzer

146
00:07:36,180 --> 00:07:38,730
‫anmeldet, sondern es ist der eigene

147
00:07:38,730 --> 00:07:41,580
‫Benutzer, der sich selbst anmeldet oder sich selbst einloggt.

148
00:07:41,580 --> 00:07:45,040
‫Okay, macht das Sinn?

149
00:07:45,040 --> 00:07:46,613
‫Wir sollten also jetzt alles an Ort

150
00:07:47,570 --> 00:07:50,160
‫und Stelle haben, damit es jetzt funktionieren sollte, wenn wir unseren neuen Benutzer erstellen.

151
00:07:50,160 --> 00:07:53,830
‫Also wenn wir uns im Grunde für unsere Bewerbung anmelden.

152
00:07:53,830 --> 00:07:57,270
‫Also versuchen wir es jetzt.

153
00:07:57,270 --> 00:07:58,683
‫Lassen Sie uns einfach diese URL

154
00:08:01,020 --> 00:08:02,447
‫und die Benutzer kopieren und dann registrieren.

155
00:08:06,610 --> 00:08:08,393
‫Dann müssen wir den Body

156
00:08:11,743 --> 00:08:13,710
‫angeben, sagen wir raw und dann JSON.

157
00:08:14,640 --> 00:08:19,190
‫Und natürlich nicht vergessen, diesen auf POST

158
00:08:19,190 --> 00:08:20,720
‫zu setzen.

159
00:08:20,720 --> 00:08:22,223
‫Welche Daten brauchen wir hier also?

160
00:08:25,478 --> 00:08:27,830
‫Denken Sie daran, zuerst ist

161
00:08:27,830 --> 00:08:30,293
‫der Name, dann die E-Mail, und

162
00:08:34,710 --> 00:08:39,710
‫ich trage meine eigenen hier ein, dann das Passwort, und lassen Sie uns

163
00:08:46,211 --> 00:08:49,211
‫hier einfach etwas tun, es spielt keine Rolle.

164
00:08:50,360 --> 00:08:52,560
‫Und wieder werden wir etwas später über

165
00:08:54,850 --> 00:08:56,330
‫die Passwortverwaltung sprechen,

166
00:08:56,330 --> 00:08:58,383
‫und zwar gleich im nächsten Video.

167
00:08:59,290 --> 00:09:01,140
‫Also sollte dieser hier jetzt gleich sein.

168
00:09:02,420 --> 00:09:04,960
‫Also pass1234, nur als Test.

169
00:09:04,960 --> 00:09:08,143
‫Und das Erinnerungsfoto ist nicht erforderlich, und

170
00:09:09,287 --> 00:09:11,820
‫deshalb mache ich das nicht.

171
00:09:11,820 --> 00:09:13,663
‫Also lass uns jetzt sehen.

172
00:09:15,040 --> 00:09:16,133
‫Und jetzt bekommen wir diesen Fehler

173
00:09:17,990 --> 00:09:20,180
‫hier, und das liegt daran, dass ich das Passwort hier falsch geschrieben habe.

174
00:09:20,180 --> 00:09:22,853
‫Okay, das wäre also die deutsche Schreibweise.

175
00:09:24,150 --> 00:09:27,373
‫Und jetzt ist es richtig.

176
00:09:28,370 --> 00:09:29,890
‫Okay, und tatsächlich bekommen wir hier unseren neuen Benutzer.

177
00:09:29,890 --> 00:09:33,460
‫Perfekt.

178
00:09:33,460 --> 00:09:34,580
‫Nehmen wir nun an, dass wir dies mit einem GET versucht haben.

179
00:09:34,580 --> 00:09:38,350
‫Was würden wir bekommen?

180
00:09:38,350 --> 00:09:39,800
‫Nun, "Diese Route

181
00:09:39,800 --> 00:09:42,300
‫ist noch nicht definiert", was daran

182
00:09:42,300 --> 00:09:44,350
‫liegt, dass wir diese Route

183
00:09:44,350 --> 00:09:47,620
‫hier eigentlich schon definiert haben, also im Grunde diesen

184
00:09:47,620 --> 00:09:50,180
‫Teil hier der Route, also lass

185
00:09:50,180 --> 00:09:52,910
‫mich dir das schnell zeigen, also ist

186
00:09:52,910 --> 00:09:55,970
‫es nicht im tourController, sondern in der userController.

187
00:09:55,970 --> 00:09:58,640
‫Im Grunde haben wir hier getUser

188
00:09:58,640 --> 00:10:01,560
‫und dann "Diese Route ist noch nicht definiert. „Das ist also das, was wir bekommen,

189
00:10:01,560 --> 00:10:04,174
‫aber das

190
00:10:04,174 --> 00:10:06,024
‫interessiert uns natürlich nicht wirklich.

191
00:10:07,160 --> 00:10:09,860
‫Und lass uns das jetzt hier bei Postman speichern,

192
00:10:11,460 --> 00:10:13,630
‫damit wir es dann einfach wiederverwenden können.

193
00:10:13,630 --> 00:10:16,613
‫Also melde dich an.

194
00:10:21,520 --> 00:10:22,513
‫Und jetzt, um

195
00:10:24,700 --> 00:10:26,600
‫es schnell zu bestätigen, öffnen wir es

196
00:10:26,600 --> 00:10:29,420
‫auch hier in Compass und sehen nur, dass wir zu diesem

197
00:10:29,420 --> 00:10:32,320
‫Zeitpunkt nur Touren haben, und gehen wir also hier zu Natours,

198
00:10:32,320 --> 00:10:36,433
‫versuchen Sie es neu zu laden, und das ist wahrscheinlich hier oben, und so Tatsächlich bekommen

199
00:10:37,490 --> 00:10:38,890
‫wir jetzt unsere Benutzersammlung hier.

200
00:10:41,000 --> 00:10:44,820
‫Also lasst uns das öffnen, und tatsächlich bekommen wir

201
00:10:44,820 --> 00:10:47,120
‫jetzt unser erstes Dokument hier.

202
00:10:47,120 --> 00:10:49,470
‫Also der Benutzer, den wir gerade erstellt haben.

203
00:10:49,470 --> 00:10:51,640
‫Jetzt können Sie hier das einfache

204
00:10:51,640 --> 00:10:54,430
‫Passwort sehen, und das ist natürlich nicht ideal.

205
00:10:54,430 --> 00:10:57,270
‫Und das ist natürlich nicht ideal,

206
00:10:57,270 --> 00:10:59,170
‫daher sollten Passwörter in

207
00:10:59,170 --> 00:11:03,090
‫einer Webanwendung niemals einfach in einer Datenbank gespeichert werden.

208
00:11:03,090 --> 00:11:05,983
‫Es gibt also eine Menge Passwortverwaltung, die hinter den

209
00:11:07,060 --> 00:11:10,020
‫Kulissen durchgeführt werden muss, und genau das werden wir

210
00:11:10,020 --> 00:11:11,750
‫im nächsten Video tun.

