﻿1
00:00:00,960 --> 00:00:02,570
‫Kursleiter: Wir müssen dem

2
00:00:02,570 --> 00:00:06,600
‫Benutzer nun das Token zum Zurücksetzen des Passworts per E-Mail senden.

3
00:00:06,600 --> 00:00:08,860
‫In diesem Vortrag lernen wir,

4
00:00:08,860 --> 00:00:12,140
‫wie Sie E-Mails mit einer sehr beliebten Lösung

5
00:00:12,140 --> 00:00:13,630
‫namens Nodemailer senden.

6
00:00:15,154 --> 00:00:17,600
‫Aber bevor wir das tun, wollte ich

7
00:00:17,600 --> 00:00:20,840
‫Ihnen eigentlich die Wirkung zeigen, diese Option hier nicht zu haben,

8
00:00:20,840 --> 00:00:23,540
‫da ich Ihnen eigentlich noch nie zuvor gezeigt habe.

9
00:00:23,540 --> 00:00:26,543
‫Lassen Sie uns es hier abschneiden, versuchen Sie es jetzt

10
00:00:28,910 --> 00:00:31,720
‫noch einmal, und jetzt sehen Sie alle diese Fehler, die

11
00:00:31,720 --> 00:00:33,890
‫auftauchen. Bitte bestätigen Sie Ihr Passwort.

12
00:00:33,890 --> 00:00:36,010
‫Und eigentlich sollte es noch mehr

13
00:00:36,010 --> 00:00:39,340
‫geben, aber nun, das ist jetzt der erste, den Sie bekommen.

14
00:00:39,340 --> 00:00:41,400
‫Im Grunde, weil wir keinen

15
00:00:41,400 --> 00:00:43,650
‫Wert im Feld zur Passwortbestätigung haben.

16
00:00:43,650 --> 00:00:44,483
‫Okay?

17
00:00:44,483 --> 00:00:46,600
‫Und das liegt wiederum an der

18
00:00:46,600 --> 00:00:49,330
‫Validierung und wir können es natürlich wieder mit

19
00:00:49,330 --> 00:00:51,083
‫dieser Option einfach deaktivieren.

20
00:00:53,430 --> 00:00:56,600
‫Aber egal, lassen Sie uns jetzt eine E-Mail-Handler-Funktion erstellen, die

21
00:00:56,600 --> 00:00:59,580
‫wir dann in unserer gesamten Anwendung verwenden können.

22
00:00:59,580 --> 00:01:00,860
‫Also werde ich

23
00:01:00,860 --> 00:01:02,673
‫das hier im Utilities-Ordner wieder

24
00:01:04,210 --> 00:01:08,440
‫tun und es einfach E-Mail nennen. js.

25
00:01:08,440 --> 00:01:09,650
‫Gut?

26
00:01:09,650 --> 00:01:11,410
‫Und bevor wir

27
00:01:11,410 --> 00:01:14,240
‫etwas anderes tun, installieren wir das Nodemailer-Paket.

28
00:01:14,240 --> 00:01:16,120
‫Das ist also das Paket, das ich gleich zu

29
00:01:16,120 --> 00:01:17,390
‫Beginn erwähnt habe und das

30
00:01:17,390 --> 00:01:20,723
‫wir verwenden werden, um E-Mails mit Node. js.

31
00:01:23,130 --> 00:01:27,620
‫Also, wie immer, npm install nodemailer.

32
00:01:34,170 --> 00:01:35,123
‫Und hier drin.

33
00:01:42,674 --> 00:01:46,423
‫In Ordnung, und jetzt erstellen wir diese Funktion hier.

34
00:01:49,500 --> 00:01:51,113
‫Also ständige E-Mails, okay,

35
00:01:52,880 --> 00:01:54,350
‫und dann

36
00:01:54,350 --> 00:01:58,060
‫werden wir hier im Grunde einige Optionen durchgehen.

37
00:01:58,060 --> 00:02:01,090
‫Also die E-Mail-Adresse, an die wir eine E-Mail

38
00:02:01,090 --> 00:02:03,780
‫senden möchten, die Betreffzeile, den E-Mail-Inhalt und

39
00:02:03,780 --> 00:02:05,803
‫vielleicht noch einige andere Dinge.

40
00:02:07,625 --> 00:02:08,780
‫Gut.

41
00:02:08,780 --> 00:02:11,180
‫Jetzt müssen wir also drei Schritte

42
00:02:11,180 --> 00:02:13,950
‫ausführen, um E-Mails mit Nodemailer zu senden.

43
00:02:15,120 --> 00:02:18,783
‫Zuerst müssen wir also einen Transporter erstellen.

44
00:02:23,950 --> 00:02:24,963
‫Als

45
00:02:27,340 --> 00:02:31,777
‫nächstes müssen wir im Grunde die E-Mail-Optionen definieren und

46
00:02:35,330 --> 00:02:36,373
‫dann am

47
00:02:37,930 --> 00:02:41,820
‫Ende die E-Mail tatsächlich mit Nodemailer senden.

48
00:02:41,820 --> 00:02:42,960
‫Okay?

49
00:02:42,960 --> 00:02:46,260
‫Der Transporter, den wir hier im ersten Schritt erstellt haben,

50
00:02:46,260 --> 00:02:50,790
‫ist im Grunde genommen ein Dienst, der die E-Mail tatsächlich sendet, da er

51
00:02:50,790 --> 00:02:53,610
‫kein Knoten ist. js, das

52
00:02:53,610 --> 00:02:55,220
‫die E-Mail tatsächlich sendet.

53
00:02:55,220 --> 00:02:57,720
‫Es ist nur ein Service, den wir hier definieren.

54
00:02:57,720 --> 00:03:00,340
‫Etwas wie Gmail zum Beispiel.

55
00:03:00,340 --> 00:03:02,270
‫Nun, Gmail ist nicht wirklich der

56
00:03:02,270 --> 00:03:03,370
‫Dienst, den wir

57
00:03:03,370 --> 00:03:05,760
‫verwenden werden, aber lassen Sie mich Ihnen kurz

58
00:03:05,760 --> 00:03:08,350
‫zeigen, wie es mit Gmail funktioniert, weil ich weiß,

59
00:03:08,350 --> 00:03:10,810
‫dass viele Leute daran interessiert sein werden, okay?

60
00:03:10,810 --> 00:03:15,120
‫Wir müssen also sowieso immer einen Transporter erstellen, und der ist

61
00:03:15,120 --> 00:03:16,260
‫immer derselbe,

62
00:03:16,260 --> 00:03:18,210
‫egal welchen Dienst wir nutzen.

63
00:03:20,070 --> 00:03:22,410
‫Der Transporter wird also Nodemailer

64
00:03:22,410 --> 00:03:24,577
‫sein. createTransport und

65
00:03:28,660 --> 00:03:31,550
‫dann brauchen wir da natürlich einige Optionen.

66
00:03:31,550 --> 00:03:32,920
‫Gut?

67
00:03:32,920 --> 00:03:35,820
‫Wir können also den Dienst angeben und

68
00:03:37,620 --> 00:03:40,360
‫sagen, dass wir Gmail verwenden möchten.

69
00:03:40,360 --> 00:03:42,110
‫Also einfach so.

70
00:03:42,110 --> 00:03:44,530
‫Und es gibt ein paar

71
00:03:44,530 --> 00:03:47,260
‫bekannte Dienste, mit denen Nodemailer umzugehen weiß,

72
00:03:47,260 --> 00:03:49,870
‫und wir müssen diese nicht manuell konfigurieren.

73
00:03:49,870 --> 00:03:52,660
‫Und so ist Gmail nur einer davon.

74
00:03:52,660 --> 00:03:56,863
‫Aber es gibt auch Yahoo oder Hotmail oder viele andere, okay?

75
00:03:57,760 --> 00:03:58,980
‫Das ist also

76
00:03:58,980 --> 00:04:03,020
‫der Dienst, und dann müssen wir auch noch die Auth-Eigenschaft angeben, also

77
00:04:03,020 --> 00:04:04,783
‫im Grunde für die Authentifizierung.

78
00:04:06,150 --> 00:04:08,730
‫Wir brauchen also einen Benutzer und ein Passwort.

79
00:04:08,730 --> 00:04:10,380
‫Und genau wie zuvor speichern

80
00:04:10,380 --> 00:04:14,253
‫wir solche Sachen in unserer Konfiguration. n-Datei.

81
00:04:15,840 --> 00:04:16,673
‫Gut.

82
00:04:17,930 --> 00:04:18,963
‫E-Mail,

83
00:04:21,090 --> 00:04:22,253
‫das ist ein

84
00:04:23,500 --> 00:04:26,700
‫Benutzername, und jetzt werde ich hier keine echte

85
00:04:26,700 --> 00:04:28,963
‫Gmail-Adresse verwenden, da wir wiederum

86
00:04:29,910 --> 00:04:34,140
‫kein Gmail verwenden, aber hier nur als Beispiel, in Ordnung.

87
00:04:34,140 --> 00:04:36,910
‫Ihr Passwort.

88
00:04:36,910 --> 00:04:38,350
‫Gut.

89
00:04:38,350 --> 00:04:40,480
‫Also hier sind wir fertig,

90
00:04:40,480 --> 00:04:41,350
‫sagen

91
00:04:43,090 --> 00:04:44,830
‫wir, Prozess Punkt Ende

92
00:04:47,414 --> 00:04:48,581
‫Punkt EMAIL_USERNAME das

93
00:04:53,780 --> 00:04:56,113
‫Passwort Prozess Punkt End Punkt EMAIL_PASSWORD

94
00:04:58,310 --> 00:04:59,800
‫und ich hoffe, dass

95
00:05:02,650 --> 00:05:04,723
‫ich diese richtig geschrieben habe.

96
00:05:05,580 --> 00:05:06,413
‫Okay?

97
00:05:06,413 --> 00:05:07,970
‫Dies ist also

98
00:05:07,970 --> 00:05:10,610
‫die Konfiguration für den Transport im Nodemailer.

99
00:05:10,610 --> 00:05:12,400
‫Dann müssen Sie in

100
00:05:12,400 --> 00:05:14,160
‫Ihrem Gmail-Konto tatsächlich

101
00:05:14,160 --> 00:05:17,346
‫die so genannte weniger sichere App-Option aktivieren.

102
00:05:17,346 --> 00:05:18,896
‫Also lass mich das hier aufschreiben.

103
00:05:27,609 --> 00:05:29,640
‫Und noch einmal, ich werde es hier

104
00:05:29,640 --> 00:05:31,020
‫nicht tun, aber ich

105
00:05:31,020 --> 00:05:33,160
‫weiß, dass viele Leute es tatsächlich verwenden wollen.

106
00:05:33,160 --> 00:05:35,710
‫Und der Grund, warum wir Gmail in

107
00:05:35,710 --> 00:05:37,200
‫dieser Anwendung nicht verwenden,

108
00:05:37,200 --> 00:05:40,170
‫ist, dass Gmail für eine Produktions-App überhaupt keine

109
00:05:40,170 --> 00:05:41,510
‫gute Idee ist.

110
00:05:41,510 --> 00:05:44,170
‫Und das ist im Grunde das, was wir hier aufbauen wollen.

111
00:05:44,170 --> 00:05:45,003
‫Okay?

112
00:05:45,003 --> 00:05:47,600
‫Wenn Sie also Gmail für diese Art

113
00:05:47,600 --> 00:05:50,670
‫von Dingen verwenden, können Sie nur 500 E-Mails pro

114
00:05:50,670 --> 00:05:53,520
‫Tag senden, und Sie werden wahrscheinlich sehr schnell

115
00:05:53,520 --> 00:05:57,410
‫als Spammer gekennzeichnet, und von da an geht es nur noch bergab.

116
00:05:57,410 --> 00:05:58,330
‫Gut?

117
00:05:58,330 --> 00:06:00,710
‫Es sei denn, es ist wie eine private

118
00:06:00,710 --> 00:06:02,780
‫App und Sie senden nur E-Mails an

119
00:06:02,780 --> 00:06:04,470
‫sich selbst oder an 10

120
00:06:04,470 --> 00:06:07,090
‫Freunde, nun, dann sollten Sie einen anderen Dienst nutzen.

121
00:06:07,090 --> 00:06:10,680
‫Und einige bekannte sind SendGrid und Mailgun.

122
00:06:10,680 --> 00:06:13,740
‫Und tatsächlich werden wir SendGrid etwas später in

123
00:06:13,740 --> 00:06:15,180
‫diesem Kurs verwenden.

124
00:06:15,180 --> 00:06:17,400
‫Was wir jetzt tun werden,

125
00:06:17,400 --> 00:06:19,920
‫ist, einen speziellen Entwicklungsdienst zu verwenden, der

126
00:06:19,920 --> 00:06:23,740
‫im Grunde fälscht, um E-Mails an echte Adressen zu senden.

127
00:06:23,740 --> 00:06:26,660
‫In Wirklichkeit landen diese E-Mails jedoch in einem

128
00:06:26,660 --> 00:06:29,920
‫Entwicklungspostfach, sodass wir uns dann ansehen können, wie sie

129
00:06:29,920 --> 00:06:32,320
‫später in der Produktion aussehen werden.

130
00:06:32,320 --> 00:06:33,270
‫Gut?

131
00:06:33,270 --> 00:06:35,700
‫Dieser Dienst heißt also Mailtrap, also melden

132
00:06:35,700 --> 00:06:37,893
‫wir uns jetzt dafür an.

133
00:06:41,190 --> 00:06:42,023
‫So.

134
00:06:43,500 --> 00:06:45,883
‫Brieffalle. ja, alles

135
00:06:47,810 --> 00:06:48,643
‫klar?

136
00:06:48,643 --> 00:06:51,050
‫Also, und wie gesagt, sichere E-Mail-Tests

137
00:06:51,050 --> 00:06:52,940
‫für Staging und Entwicklung.

138
00:06:52,940 --> 00:06:54,280
‫Im Grunde können

139
00:06:54,280 --> 00:06:57,410
‫Sie mit diesem Dienst also fälschen, um E-Mails an Kunden

140
00:06:57,410 --> 00:07:00,230
‫zu senden, aber diese E-Mails erreichen diese Kunden

141
00:07:00,230 --> 00:07:03,670
‫dann nie und bleiben stattdessen in Ihrer Mailtrap gefangen, okay?

142
00:07:03,670 --> 00:07:05,660
‫Auf diese Weise können

143
00:07:05,660 --> 00:07:09,150
‫Sie nicht versehentlich einige Entwicklungs-E-Mails an alle Ihre

144
00:07:09,150 --> 00:07:11,540
‫Kunden oder Benutzer senden, okay.

145
00:07:11,540 --> 00:07:13,450
‫Also mach weiter und melde dich jetzt an.

146
00:07:13,450 --> 00:07:15,430
‫Meinen Account habe ich natürlich schon und

147
00:07:15,430 --> 00:07:17,040
‫melde mich jetzt einfach an.

148
00:07:17,040 --> 00:07:19,390
‫Wir sehen uns in einer Sekunde, nachdem

149
00:07:19,390 --> 00:07:21,600
‫Sie Ihr kostenloses Konto erstellt haben.

150
00:07:21,600 --> 00:07:24,350
‫Alles klar, nach dem Erstellen Ihres

151
00:07:24,350 --> 00:07:27,290
‫Kontos wird es wahrscheinlich ein bisschen so aussehen.

152
00:07:27,290 --> 00:07:29,630
‫Jetzt haben Sie vorerst keinen Posteingang, also

153
00:07:29,630 --> 00:07:31,810
‫erstellen wir einfach einen neuen mit

154
00:07:31,810 --> 00:07:32,970
‫dem Namen natours.

155
00:07:32,970 --> 00:07:36,200
‫Ich habe also bereits einen, aber erstelle hier einfach einen neuen

156
00:07:36,200 --> 00:07:39,260
‫mit dem Namen natours und klicke dann auf Posteingang erstellen.

157
00:07:39,260 --> 00:07:40,093
‫Gut?

158
00:07:40,093 --> 00:07:41,520
‫Dann können wir es

159
00:07:41,520 --> 00:07:44,280
‫öffnen, und Sie sehen, dass wir zu diesem Zeitpunkt

160
00:07:44,280 --> 00:07:45,950
‫keine E-Mail haben, aber was

161
00:07:45,950 --> 00:07:48,170
‫im Moment zählt, sind diese Anmeldeinformationen hier.

162
00:07:48,170 --> 00:07:50,310
‫Sie sehen, wir haben unseren Host

163
00:07:50,310 --> 00:07:53,120
‫hier, wir haben den Port, den Benutzernamen und das Passwort.

164
00:07:53,120 --> 00:07:54,990
‫Und das werden wir

165
00:07:54,990 --> 00:07:57,580
‫jetzt in unserem Transport in Nodemailer angeben.

166
00:07:57,580 --> 00:07:58,413
‫Gut?

167
00:07:58,413 --> 00:08:00,810
‫Fangen wir also mit dem Host an,

168
00:08:00,810 --> 00:08:02,060
‫nun, eigentlich mit

169
00:08:02,060 --> 00:08:04,320
‫dem Benutzernamen, also diese beiden muss

170
00:08:04,320 --> 00:08:07,933
‫ich nur kopieren, also kopieren wir sie in unsere Konfigurationsdatei, das

171
00:08:09,100 --> 00:08:11,323
‫ist also der Benutzername, dann ist

172
00:08:13,220 --> 00:08:14,723
‫das das Passwort, und

173
00:08:18,620 --> 00:08:21,813
‫jetzt müssen wir es auch noch den Host angeben.

174
00:08:28,580 --> 00:08:31,830
‫Okay, und das liegt daran, dass Mailtrap

175
00:08:31,830 --> 00:08:35,493
‫keiner dieser vordefinierten Dienste ist, die mit Nodemailer geliefert werden.

176
00:08:39,720 --> 00:08:40,553
‫Gut.

177
00:08:44,800 --> 00:08:46,433
‫Der Hafen ist 25.

178
00:08:47,780 --> 00:08:49,660
‫Also speichern Sie es,

179
00:08:49,660 --> 00:08:53,390
‫und dann lassen Sie uns das hier loswerden,

180
00:08:53,390 --> 00:08:56,690
‫und was ich stattdessen angeben muss, ist

181
00:08:57,730 --> 00:08:58,803
‫der

182
00:09:00,040 --> 00:09:01,460
‫Host, also E-Mail,

183
00:09:01,460 --> 00:09:03,430
‫Host und natürlich der Port.

184
00:09:03,430 --> 00:09:05,773
‫Also alles, was wir vorher gespeichert haben.

185
00:09:10,800 --> 00:09:12,950
‫Alles klar, dann ist die Authentifizierung

186
00:09:12,950 --> 00:09:14,323
‫hier genau dieselbe.

187
00:09:15,790 --> 00:09:17,643
‫Lassen Sie uns dies ebenfalls loswerden

188
00:09:19,888 --> 00:09:22,200
‫und fahren Sie mit Schritt Nummer zwei fort.

189
00:09:22,200 --> 00:09:24,913
‫Definieren Sie also grundsätzlich einige Optionen für unsere E-Mail.

190
00:09:29,440 --> 00:09:31,700
‫Okay, und wir könnten natürlich

191
00:09:31,700 --> 00:09:34,320
‫Schritt zwei und drei gleichzeitig machen, aber

192
00:09:34,320 --> 00:09:36,970
‫ich bevorzuge diese Optionen hier einfach zuerst.

193
00:09:37,810 --> 00:09:39,910
‫Okay, und hier geben wir

194
00:09:39,910 --> 00:09:41,603
‫an, woher die E-Mail

195
00:09:42,660 --> 00:09:43,713
‫kommt, also

196
00:09:45,890 --> 00:09:48,963
‫den Namen und dann die E-Mail-Adresse wie folgt.

197
00:09:52,800 --> 00:09:55,453
‫Als nächstes brauchen wir die Adresse

198
00:09:57,500 --> 00:10:01,153
‫des Empfängers, und die werde ich optional angeben,

199
00:10:03,200 --> 00:10:04,033
‫okay?

200
00:10:04,033 --> 00:10:06,560
‫Also im Grunde genommen als Argument für diese Funktion.

201
00:10:06,560 --> 00:10:08,650
‫Dieses Optionsobjekt hier ist also

202
00:10:08,650 --> 00:10:11,173
‫dieses, das wir an die Funktion übergeben.

203
00:10:12,110 --> 00:10:13,370
‫Gut.

204
00:10:13,370 --> 00:10:17,263
‫Dann eigentlich dasselbe für das Thema und für den Text.

205
00:10:18,990 --> 00:10:20,593
‫Lassen Sie uns diese

206
00:10:26,250 --> 00:10:28,170
‫hier einfach duplizieren, also den Betreff

207
00:10:29,300 --> 00:10:31,720
‫und dann geben wir nur die Texteigenschaft an,

208
00:10:31,720 --> 00:10:34,793
‫und diese in den Optionen nenne ich es einfach Nachricht.

209
00:10:35,790 --> 00:10:38,070
‫Alles klar, dies ist also im Grunde

210
00:10:38,070 --> 00:10:39,950
‫die Textversion der E-Mail.

211
00:10:39,950 --> 00:10:44,220
‫Wir können dann aber auch die HTML-Eigenschaft angeben.

212
00:10:44,220 --> 00:10:48,220
‫Okay, und so könnten wir diese Nachricht nun in HTML umwandeln.

213
00:10:48,220 --> 00:10:50,460
‫Und später werden wir das tun, aber

214
00:10:50,460 --> 00:10:54,780
‫lassen Sie uns es vorerst einfach halten und den HTML-Code hier überhaupt nicht angeben.

215
00:10:54,780 --> 00:10:55,613
‫Okay?

216
00:10:55,613 --> 00:10:57,993
‫Also belasse es einfach bei Text.

217
00:10:59,320 --> 00:11:00,153
‫Okay!

218
00:11:00,153 --> 00:11:01,773
‫Und schließlich,

219
00:11:03,050 --> 00:11:06,723
‫am Ende, transporter, das ist also das Transporter-Objekt,

220
00:11:06,723 --> 00:11:09,440
‫das wir hier am Anfang

221
00:11:09,440 --> 00:11:11,890
‫erstellt haben, und darauf können

222
00:11:14,470 --> 00:11:18,983
‫wir dann sendMail aufrufen und dort unsere Mail-Optionen eingeben, okay?

223
00:11:19,900 --> 00:11:22,640
‫Und jetzt gibt dies tatsächlich ein Versprechen zurück.

224
00:11:22,640 --> 00:11:25,890
‫Okay, dies ist wieder eine asynchrone Funktion,

225
00:11:25,890 --> 00:11:29,480
‫und da wir nicht direkt mit Promises arbeiten möchten,

226
00:11:29,480 --> 00:11:30,933
‫verwenden wir async/await.

227
00:11:32,890 --> 00:11:33,723
‫Gut.

228
00:11:34,770 --> 00:11:37,450
‫Also als asynchrone Funktion deklarieren und

229
00:11:37,450 --> 00:11:39,023
‫los gehts.

230
00:11:40,030 --> 00:11:41,070
‫Gut.

231
00:11:41,070 --> 00:11:43,250
‫Wir wollen hier kein Ergebnis speichern,

232
00:11:43,250 --> 00:11:46,423
‫was wir könnten, aber das interessiert mich nicht wirklich.

233
00:11:47,940 --> 00:11:51,930
‫Okay, und jetzt exportieren wir es einfach als

234
00:11:51,930 --> 00:11:54,263
‫Standard aus diesem Modul.

235
00:11:57,990 --> 00:11:59,360
‫Okay, sieht gut aus!

236
00:11:59,360 --> 00:12:02,890
‫Lassen Sie uns nun weitermachen und dies tatsächlich versuchen.

237
00:12:02,890 --> 00:12:07,050
‫Um zu beginnen, müssen wir es natürlich hier importieren.

238
00:12:07,050 --> 00:12:09,003
‫Lassen Sie uns das hier

239
00:12:13,270 --> 00:12:14,370
‫einfach duplizieren,

240
00:12:14,370 --> 00:12:19,163
‫also ist dies eine E-Mail und die Funktion heißt sendEmail, denke ich.

241
00:12:21,573 --> 00:12:22,406
‫Okay.

242
00:12:22,406 --> 00:12:26,513
‫Kehren wir also zu unserer Middleware-Funktion hier zurück und beginnen

243
00:12:28,540 --> 00:12:31,397
‫wir mit der Definition der Reset-URL.

244
00:12:33,890 --> 00:12:37,810
‫Idealerweise klickt der Benutzer dann auf diese E-Mail und kann

245
00:12:37,810 --> 00:12:41,240
‫dann die Anfrage von dort aus ausführen.

246
00:12:41,240 --> 00:12:42,500
‫Und das wird

247
00:12:42,500 --> 00:12:44,650
‫später funktionieren, wenn wir unsere dynamische

248
00:12:44,650 --> 00:12:48,170
‫Website implementieren, aber trotzdem wollen wir diese URL jetzt hier erstellen,

249
00:12:48,170 --> 00:12:50,350
‫damit der Benutzer sie einfach kopieren

250
00:12:50,350 --> 00:12:52,433
‫kann, um diese Anfrage zu erleichtern.

251
00:12:53,720 --> 00:12:56,130
‫Okay, im Grunde müssen wir

252
00:12:57,350 --> 00:13:00,750
‫diese URL-Struktur, die wir hier haben, neu erstellen.

253
00:13:00,750 --> 00:13:02,627
‫Dieses hier ist also für das vergessene Passwort

254
00:13:02,627 --> 00:13:04,227
‫und lass es uns hier speichern.

255
00:13:10,670 --> 00:13:14,910
‫Also, Passwort vergessen, und jetzt ist die URL, die wir erstellen,

256
00:13:14,910 --> 00:13:17,820
‫eigentlich für das Zurücksetzen des Passworts.

257
00:13:17,820 --> 00:13:21,340
‫Denken Sie also daran, dass wir das tatsächlich schon einmal implementiert haben.

258
00:13:21,340 --> 00:13:22,173
‫Okay.

259
00:13:22,173 --> 00:13:24,020
‫Lass es uns

260
00:13:27,760 --> 00:13:31,750
‫einfach hierher kopieren, also das Passwort zurücksetzen, in Ordnung?

261
00:13:31,750 --> 00:13:33,940
‫Und das nimmt dann tatsächlich das

262
00:13:33,940 --> 00:13:35,540
‫Token als Parameter.

263
00:13:35,540 --> 00:13:39,120
‫Okay, also lasst uns erst einmal ein beliebiges Token hier reinlegen.

264
00:13:39,120 --> 00:13:40,563
‫Es ist also völlig egal.

265
00:13:41,610 --> 00:13:42,860
‫Lassen Sie

266
00:13:45,150 --> 00:13:50,150
‫mich es einfach hier speichern, als Passwort zurücksetzen.

267
00:13:50,360 --> 00:13:51,193
‫Okay.

268
00:13:51,193 --> 00:13:53,970
‫Außerdem ist es nicht GET, es

269
00:13:53,970 --> 00:13:56,320
‫ist auch kein POST, sondern

270
00:13:56,320 --> 00:13:59,490
‫PATCH, da das Ergebnis die Änderung der

271
00:13:59,490 --> 00:14:01,560
‫Kennworteigenschaft im Benutzerdokument ist.

272
00:14:01,560 --> 00:14:05,470
‫Und so ist PATCH eigentlich das Beste, okay?

273
00:14:05,470 --> 00:14:09,023
‫Lassen Sie uns also schnell unsere Routenimplementierung dafür ändern.

274
00:14:10,720 --> 00:14:14,410
‫Es ist also hier in userRoute, also

275
00:14:14,410 --> 00:14:17,480
‫nicht POST, sondern PATCH, und

276
00:14:17,480 --> 00:14:20,710
‫wir möchten auch einen Parameter angeben.

277
00:14:20,710 --> 00:14:22,330
‫Denken Sie also daran, wie wir das tun.

278
00:14:22,330 --> 00:14:24,030
‫Es ist also wie hier unten.

279
00:14:24,030 --> 00:14:26,960
‫Also ein weiterer Schrägstrich, dann Doppelpunkt und dann der

280
00:14:26,960 --> 00:14:29,593
‫Name des Parameters, der als Token verwendet wird.

281
00:14:31,390 --> 00:14:32,990
‫Okay, und lassen Sie uns

282
00:14:32,990 --> 00:14:34,870
‫das jetzt aufbauen, beginnend mit dem Protokoll.

283
00:14:34,870 --> 00:14:38,340
‫Also HTTP oder HTTPS, okay?

284
00:14:38,340 --> 00:14:42,283
‫Und wir werden diese Daten im Grunde aus unserer Anfrage bekommen.

285
00:14:43,180 --> 00:14:45,720
‫Das wird also auf Anfrage

286
00:14:47,250 --> 00:14:51,750
‫gespeichert, Punktprotokoll, dann Doppelpunkt Schrägstrich Schrägstrich und dann der Host, okay?

287
00:14:51,750 --> 00:14:54,590
‫Also bereiten wir dieses hier im Grunde darauf vor, sowohl in

288
00:14:54,590 --> 00:14:57,260
‫der Entwicklung als auch in der Produktion zu arbeiten.

289
00:14:57,260 --> 00:15:00,630
‫Fordern Sie also dot get an und hosten

290
00:15:00,630 --> 00:15:01,513
‫Sie dann.

291
00:15:02,760 --> 00:15:04,950
‫In Ordnung, so bekommen wir den

292
00:15:04,950 --> 00:15:09,100
‫Host und dann Slash-API-Slash-Version eins, und ich denke, es ist nicht

293
00:15:09,100 --> 00:15:11,860
‫ideal, eine solche Stufe hartcodiert zu definieren,

294
00:15:11,860 --> 00:15:13,170
‫aber auch

295
00:15:13,170 --> 00:15:15,260
‫dies ist etwas, das wir

296
00:15:15,260 --> 00:15:17,080
‫etwas später beheben werden. okay?

297
00:15:17,080 --> 00:15:20,100
‫Und ich sehe, dass das eigentlich nicht richtig ist.

298
00:15:20,100 --> 00:15:22,680
‫Diese geschweiften Klammern sollten da sein.

299
00:15:22,680 --> 00:15:24,263
‫Also, jetzt, Benutzer,

300
00:15:25,676 --> 00:15:26,843
‫resetPassword und

301
00:15:28,910 --> 00:15:32,830
‫dann noch ein Schrägstrich und schließlich das Token.

302
00:15:32,830 --> 00:15:34,833
‫Okay, also resetToken.

303
00:15:35,790 --> 00:15:36,623
‫Gut?

304
00:15:36,623 --> 00:15:38,780
‫Und wie wir bereits im letzten Vortrag

305
00:15:38,780 --> 00:15:40,000
‫besprochen haben, müssen

306
00:15:40,000 --> 00:15:44,000
‫wir hier tatsächlich den einfachen, originalen resetToken senden und nicht den verschlüsselten.

307
00:15:44,000 --> 00:15:44,833
‫Gut?

308
00:15:44,833 --> 00:15:46,170
‫Wir werden dann

309
00:15:46,170 --> 00:15:49,810
‫im nächsten Schritt den Original-Token mit dem verschlüsselten vergleichen.

310
00:15:49,810 --> 00:15:52,780
‫Also noch einmal, so wie wir es im letzten Video besprochen haben.

311
00:15:52,780 --> 00:15:56,657
‫Speichern Sie es jetzt hier, und das ist unsere Reset-URL.

312
00:16:00,940 --> 00:16:04,490
‫Und jetzt lassen Sie uns basierend auf dieser URL auch hier

313
00:16:04,490 --> 00:16:06,233
‫schnell die Nachricht erstellen.

314
00:16:07,950 --> 00:16:11,113
‫Also, Passwort vergessen?

315
00:16:13,120 --> 00:16:17,720
‫Senden Sie eine PATCH-Anfrage mit Ihrem neuen

316
00:16:18,900 --> 00:16:21,650
‫Passwort und PasswortBestätigen Sie

317
00:16:24,380 --> 00:16:26,273
‫natürlich an

318
00:16:30,850 --> 00:16:34,270
‫die soeben erstellte Reset-URL, okay?

319
00:16:34,270 --> 00:16:37,500
‫Im Grunde geben Sie dem Benutzer hier einige Anweisungen.

320
00:16:37,500 --> 00:16:39,373
‫Dann sagen wir in einer neuen

321
00:16:40,670 --> 00:16:44,053
‫Zeile auch, wenn Sie Ihr Passwort nicht vergessen haben, ignorieren

322
00:16:47,820 --> 00:16:49,610
‫Sie diese E-Mail bitte.

323
00:16:49,610 --> 00:16:51,690
‫Das ist also eine allgemeine Botschaft, und

324
00:16:51,690 --> 00:16:54,320
‫ich bin sicher, Sie haben es auf die eine oder

325
00:16:54,320 --> 00:16:55,963
‫andere Weise gesehen, in Ordnung.

326
00:16:56,860 --> 00:16:59,900
‫Lassen Sie uns nun endlich die E-Mail senden und

327
00:16:59,900 --> 00:17:02,020
‫denken Sie daran, dass sendEmail eine

328
00:17:02,020 --> 00:17:03,640
‫asynchrone Funktion ist.

329
00:17:03,640 --> 00:17:06,470
‫Daher müssen wir hier darauf warten.

330
00:17:06,470 --> 00:17:07,303
‫Okay?

331
00:17:07,303 --> 00:17:09,693
‫Denn natürlich wird es ein Versprechen zurückgeben.

332
00:17:11,470 --> 00:17:14,850
‫Und denken Sie jetzt daran, dass die Funktion sendEmail

333
00:17:14,850 --> 00:17:17,490
‫hier ein Objekt mit einigen Optionen übernimmt.

334
00:17:17,490 --> 00:17:22,490
‫Die E-Mail ist also Benutzer. E-Mail, oder?

335
00:17:23,730 --> 00:17:28,150
‫Oder wir könnten auch sagen, req. Karosserie. Email.

336
00:17:28,150 --> 00:17:31,233
‫Das ist eigentlich genau das gleiche, oder?

337
00:17:32,900 --> 00:17:35,773
‫Dann ist das Thema, das

338
00:17:36,690 --> 00:17:41,363
‫wir sagen möchten, Ihr Token zum Zurücksetzen des Passworts.

339
00:17:44,850 --> 00:17:48,540
‫Sagen wir gleich, dass es nur 10 Minuten gültig

340
00:17:48,540 --> 00:17:52,290
‫ist, damit der Benutzer weiß, dass er sich beeilen muss.

341
00:17:52,290 --> 00:17:55,113
‫Okay, und dann endlich auch die Nachricht.

342
00:17:56,940 --> 00:17:57,773
‫Okay.

343
00:17:57,773 --> 00:18:00,080
‫Also warten wir das

344
00:18:00,080 --> 00:18:04,330
‫ab, und danach senden wir natürlich auch eine Antwort.

345
00:18:04,330 --> 00:18:07,130
‫Okay, es muss immer eine Antwort geben,

346
00:18:07,130 --> 00:18:08,860
‫sonst wird der

347
00:18:08,860 --> 00:18:11,970
‫Anfrage-Antwort-Zyklus, wie Sie bereits wissen, nie abgeschlossen.

348
00:18:11,970 --> 00:18:14,700
‫Wir senden also einfach einen

349
00:18:14,700 --> 00:18:18,720
‫200-Code und dann eine schön formatierte Nachricht mit

350
00:18:19,670 --> 00:18:22,023
‫dem Status „Erfolg“

351
00:18:25,640 --> 00:18:28,550
‫und dann nur eine kurze Nachricht

352
00:18:28,550 --> 00:18:32,410
‫mit der Aufschrift „Token an E-Mail gesendet“.

353
00:18:32,410 --> 00:18:33,243
‫Gut.

354
00:18:33,243 --> 00:18:37,490
‫Und natürlich können wir den Reset-Token nicht direkt hierher senden,

355
00:18:37,490 --> 00:18:40,970
‫direkt nebenan, denn dann könnte jeder einfach das

356
00:18:40,970 --> 00:18:42,910
‫Passwort von jedem

357
00:18:42,910 --> 00:18:45,440
‫zurücksetzen und jedes gewünschte Konto übernehmen.

358
00:18:45,440 --> 00:18:47,740
‫Aus diesem Grund senden wir sie an

359
00:18:47,740 --> 00:18:49,940
‫eine E-Mail-Adresse, da wir davon ausgehen, dass

360
00:18:49,940 --> 00:18:51,800
‫die E-Mail ein sicherer Ort

361
00:18:51,800 --> 00:18:54,187
‫ist, auf den nur der Benutzer Zugriff hat.

362
00:18:54,187 --> 00:18:55,020
‫Gut.

363
00:18:56,990 --> 00:19:00,170
‫Whoo, also, dieses Video läuft wieder ziemlich lang, aber wir

364
00:19:00,170 --> 00:19:01,620
‫sind noch nicht fertig.

365
00:19:01,620 --> 00:19:04,200
‫Wir sind fast fertig, aber nicht ganz,

366
00:19:04,200 --> 00:19:06,590
‫denn es könnte ein Fehler

367
00:19:06,590 --> 00:19:10,560
‫passieren, wenn Sie diese sendEmail verwenden, okay, und in diesem Fall

368
00:19:10,560 --> 00:19:14,100
‫möchten wir natürlich eine Fehlermeldung an den Client senden.

369
00:19:14,100 --> 00:19:16,720
‫Aber in diesem Fall müssen wir tatsächlich mehr tun,

370
00:19:16,720 --> 00:19:18,980
‫als nur eine Fehlermeldung zu senden.

371
00:19:18,980 --> 00:19:22,707
‫Wir müssen im Grunde genommen das Passwort-Reset-Token zurücksetzen

372
00:19:22,707 --> 00:19:26,660
‫und das Passwort-Reset ist abgelaufen, das wir definiert haben, okay?

373
00:19:26,660 --> 00:19:29,140
‫Im Moment reicht es also nicht aus,

374
00:19:29,140 --> 00:19:31,340
‫den Fehler einfach abzufangen und dann

375
00:19:31,340 --> 00:19:34,100
‫an unsere globale Middleware zur Fehlerbehandlung zu senden.

376
00:19:34,100 --> 00:19:36,980
‫Aber stattdessen müssen wir hier

377
00:19:36,980 --> 00:19:39,660
‫einfach einen Try-Catch-Block hinzufügen.

378
00:19:39,660 --> 00:19:42,290
‫Da wir also eigentlich

379
00:19:42,290 --> 00:19:45,363
‫mehr tun wollen, als nur einen Fehler

380
00:19:46,850 --> 00:19:49,633
‫an den Client zu senden, versuchen

381
00:19:50,950 --> 00:19:53,763
‫wir dies grundsätzlich, richtig, aber im

382
00:19:54,660 --> 00:19:57,630
‫Fehlerfall wird natürlich dieser Block hier ausgeführt.

383
00:19:57,630 --> 00:19:58,463
‫Gut?

384
00:19:58,463 --> 00:20:01,380
‫Was wir in diesem Fall also tun

385
00:20:01,380 --> 00:20:04,160
‫wollen, nun, wir wollen im Grunde,

386
00:20:04,160 --> 00:20:08,140
‫wie gesagt, sowohl das Token als auch die Expires-Eigenschaft zurücksetzen.

387
00:20:08,140 --> 00:20:09,620
‫Okay.

388
00:20:09,620 --> 00:20:11,850
‫Also, passwordResetToken, und

389
00:20:15,360 --> 00:20:18,950
‫setzen Sie es auf undefined, in Ordnung.

390
00:20:18,950 --> 00:20:22,053
‫Und das gleiche gilt für passwordResetExpires.

391
00:20:24,670 --> 00:20:25,503
‫Okay.

392
00:20:25,503 --> 00:20:27,350
‫Und dann werden natürlich nach

393
00:20:27,350 --> 00:20:30,830
‫wie vor die Daten nur modifiziert, aber nicht wirklich gespeichert.

394
00:20:30,830 --> 00:20:33,693
‫Also lass uns hinzufügen, greifen und

395
00:20:35,560 --> 00:20:39,730
‫so die Daten in diesem Fall im Grunde speichern.

396
00:20:39,730 --> 00:20:41,750
‫Okay, und zum Schluss kehren

397
00:20:41,750 --> 00:20:45,140
‫wir dann natürlich mit einem Fehler zur nächsten

398
00:20:45,140 --> 00:20:46,620
‫Middleware zurück.

399
00:20:46,620 --> 00:20:48,223
‫Also newAppError,

400
00:20:50,970 --> 00:20:55,373
‫Beim Senden der E-Mail ist ein Fehler aufgetreten.

401
00:20:57,940 --> 00:20:59,333
‫Versuchen Sie es später erneut.

402
00:21:00,220 --> 00:21:03,700
‫Und in diesem Fall kann der Fehlercode tatsächlich eine 500 sein.

403
00:21:03,700 --> 00:21:06,980
‫Das ist also wirklich wie ein Fehler, der auf dem

404
00:21:06,980 --> 00:21:09,930
‫Server aufgetreten ist, und es muss ein Fünf-Code

405
00:21:09,930 --> 00:21:12,893
‫sein, und 500 ist nur so etwas wie der Standardcode.

406
00:21:13,740 --> 00:21:15,160
‫Gut.

407
00:21:15,160 --> 00:21:20,160
‫Also, lass uns jetzt weitermachen und es noch einmal ausprobieren, in Ordnung.

408
00:21:20,830 --> 00:21:25,130
‫Das ist also wieder ziemlich lang, aber wir müssen

409
00:21:25,130 --> 00:21:27,200
‫es tun, oder?

410
00:21:27,200 --> 00:21:31,173
‫Also, Passwort vergessen, mit dieser E-Mail schauen wir es uns an.

411
00:21:32,260 --> 00:21:34,270
‫Dies kann also nicht lange

412
00:21:34,270 --> 00:21:36,400
‫dauern, weil die E-Mail gesendet wurde,

413
00:21:36,400 --> 00:21:40,360
‫aber tatsächlich hat es jetzt funktioniert, dauerte etwa fünf Sekunden, aber wir

414
00:21:40,360 --> 00:21:42,840
‫sehen, dass Token an E-Mail gesendet wurde.

415
00:21:42,840 --> 00:21:45,770
‫und so, wie wir wissen, hat Mailtrap diese E-Mail nicht an

416
00:21:45,770 --> 00:21:49,810
‫hello@jones gesendet, da wir Mailtrap verwendet haben. io, aber

417
00:21:49,810 --> 00:21:53,010
‫stattdessen sollte die E-Mail jetzt

418
00:21:53,010 --> 00:21:55,940
‫in Mailtrap eingeschlossen sein.

419
00:21:55,940 --> 00:21:59,003
‫Und tatsächlich ist es hier auf der linken Seite jetzt aufgetaucht.

420
00:21:59,890 --> 00:22:01,170
‫Gut.

421
00:22:01,170 --> 00:22:04,440
‫Das ist also die E-Mail, die wir angegeben haben, und

422
00:22:04,440 --> 00:22:06,467
‫hier erhalten wir unsere schöne URL.

423
00:22:07,960 --> 00:22:11,980
‫Okay, also die, die wir mit dem Protokoll, dem Host und

424
00:22:11,980 --> 00:22:15,070
‫dann auch mit dem Token erstellt haben.

425
00:22:15,070 --> 00:22:17,210
‫Schauen wir also einfach mal

426
00:22:17,210 --> 00:22:18,910
‫nach, ob dies

427
00:22:18,910 --> 00:22:20,873
‫wirklich unser Plain-Token ist,

428
00:22:22,130 --> 00:22:26,690
‫also auf 88df endet, und tatsächlich haben wir hier resetToken, 88df.

429
00:22:26,690 --> 00:22:29,050
‫Und jetzt sollten wir in der

430
00:22:29,050 --> 00:22:31,890
‫Datenbank das Token mit der Endung 1111 haben.

431
00:22:31,890 --> 00:22:34,883
‫Also, lassen Sie uns das hier in

432
00:22:35,780 --> 00:22:40,780
‫Compass bestätigen, laden Sie es neu, und tatsächlich können wir loslegen, okay?

433
00:22:41,470 --> 00:22:45,260
‫Und so ist es wieder hier in 10 Minuten.

434
00:22:45,260 --> 00:22:47,910
‫Großartig, also haben wir diesen Teil abgeschlossen.

435
00:22:47,910 --> 00:22:50,290
‫Als nächstes, im nächsten Video, werden wir

436
00:22:50,290 --> 00:22:52,320
‫dann das Passwort tatsächlich zurücksetzen,

437
00:22:52,320 --> 00:22:54,590
‫natürlich basierend auf dem neuen Passwort, das

438
00:22:54,590 --> 00:22:58,030
‫der Benutzer mit der Anfrage zum Zurücksetzen des Passworts sendet.

439
00:22:58,030 --> 00:22:58,993
‫Also, wir sehen uns dort.

