﻿1
00:00:01,190 --> 00:00:03,320
‫Kursleiter: In diesem und den

2
00:00:03,320 --> 00:00:05,380
‫nächsten Videos implementieren wir

3
00:00:05,380 --> 00:00:08,670
‫eine benutzerfreundliche Funktion zum Zurücksetzen von Passwörtern, die

4
00:00:08,670 --> 00:00:11,253
‫in den meisten Webanwendungen Standard ist.

5
00:00:12,750 --> 00:00:15,390
‫Und wahrscheinlich haben Sie das Zurücksetzen des Passworts

6
00:00:15,390 --> 00:00:17,720
‫schon einmal auf einer Website verwendet und

7
00:00:17,720 --> 00:00:19,140
‫normalerweise funktioniert es so.

8
00:00:19,140 --> 00:00:21,280
‫Sie müssen nur Ihre E-Mail-Adresse angeben

9
00:00:21,280 --> 00:00:23,490
‫und Sie erhalten dann eine E-Mail mit einem

10
00:00:23,490 --> 00:00:25,950
‫Link, auf den Sie klicken können, und Sie gelangen

11
00:00:25,950 --> 00:00:29,410
‫dann auf eine Seite, auf der Sie ein neues Passwort eingeben können.

12
00:00:29,410 --> 00:00:32,270
‫Dies ist ein ganz normales Verfahren und so

13
00:00:32,270 --> 00:00:34,160
‫werden wir es auch hier

14
00:00:34,160 --> 00:00:35,890
‫in dieser Anwendung implementieren.

15
00:00:35,890 --> 00:00:37,700
‫Grundsätzlich gibt es zwei Schritte.

16
00:00:37,700 --> 00:00:40,930
‫Zum einen schickt der Benutzer nur mit

17
00:00:40,930 --> 00:00:45,260
‫dieser E-Mail-Adresse eine Post-Anfrage an eine Route mit vergessenem Passwort.

18
00:00:45,260 --> 00:00:47,510
‫Dadurch wird dann ein

19
00:00:47,510 --> 00:00:50,830
‫Reset-Token erstellt und an die angegebene E-Mail-Adresse gesendet.

20
00:00:50,830 --> 00:00:54,930
‫Nur ein einfaches, zufälliges Token, kein JSON-Web-Token.

21
00:00:54,930 --> 00:00:56,610
‫Das ist hier ein Unterschied.

22
00:00:56,610 --> 00:00:59,507
‫Im zweiten Teil, dem nächsten Video, sendet

23
00:00:59,507 --> 00:01:02,800
‫der Benutzer dann dieses Token aus seiner E-Mail

24
00:01:02,800 --> 00:01:06,553
‫zusammen mit einem neuen Passwort, um sein Passwort zu aktualisieren.

25
00:01:08,040 --> 00:01:13,040
‫Grundsätzlich werden wir Exporte haben, die das Passwort vergessen haben, was der

26
00:01:14,810 --> 00:01:16,173
‫erste Schritt ist.

27
00:01:17,930 --> 00:01:22,930
‫Also Anfrage, Antwort und als nächstes und dann als zweiten

28
00:01:25,560 --> 00:01:28,703
‫Schritt haben wir das Passwort zurückgesetzt.

29
00:01:33,480 --> 00:01:37,260
‫Dann lassen Sie uns auch diese beiden Wege umsetzen.

30
00:01:37,260 --> 00:01:40,520
‫Okay, und das steht natürlich in ihrem Benutzerrouter

31
00:01:40,520 --> 00:01:42,053
‫oder ihrer Benutzerroutendatei.

32
00:01:43,190 --> 00:01:45,640
‫Stellen wir sie auch gleich hier

33
00:01:45,640 --> 00:01:48,793
‫oben und eigentlich kann ich diese Zeilen hier einfach duplizieren.

34
00:01:51,131 --> 00:01:54,593
‫Also haben wir wieder Passwort vergessen,

35
00:01:55,820 --> 00:01:58,170
‫das erst die

36
00:01:58,170 --> 00:02:03,170
‫E-Mail-Adresse erhält und dann das Passwort zurücksetzt, das den

37
00:02:03,260 --> 00:02:06,983
‫Token sowie das neue Passwort erhält.

38
00:02:09,360 --> 00:02:10,530
‫Dies ist diejenige,

39
00:02:10,530 --> 00:02:13,220
‫die wir in diesem Vortrag implementieren werden.

40
00:02:13,220 --> 00:02:17,570
‫Lassen Sie uns wie zuvor unsere Schritte hier spezifizieren.

41
00:02:17,570 --> 00:02:20,510
‫Rufen Sie also zuerst den Benutzer basierend

42
00:02:23,180 --> 00:02:25,890
‫auf der geposteten E-Mail ab

43
00:02:29,590 --> 00:02:32,383
‫und generieren Sie dann das zufällige Token.

44
00:02:37,090 --> 00:02:40,043
‫Und dann im Grunde als E-Mail zurücksenden.

45
00:02:45,910 --> 00:02:48,793
‫Dieses Zeug ist für uns derzeit ziemlich verbreitet.

46
00:02:49,680 --> 00:02:54,397
‫Also user, also warten wir auf user dot find und jetzt ist es

47
00:02:55,330 --> 00:02:57,650
‫find one, nicht nach ID

48
00:02:57,650 --> 00:03:00,920
‫finden, weil wir die ID des Benutzers nicht kennen.

49
00:03:00,920 --> 00:03:04,240
‫Und natürlich kennt der Benutzer auch seine eigene ID nicht

50
00:03:04,240 --> 00:03:06,733
‫und so haben wir die E-Mail-Adresse angegeben.

51
00:03:08,390 --> 00:03:11,363
‫Im Grunde ist es das einzige bekannte Datenelement.

52
00:03:12,230 --> 00:03:16,823
‫Und das ist Stand auf Anfrage Punkt-Körper-Punkt-E-Mail-Adresse.

53
00:03:18,723 --> 00:03:20,580
‫Und natürlich müssen wir jetzt

54
00:03:20,580 --> 00:03:25,390
‫sagen, dass wir uns in einer asynchronen Funktion befinden und dann wie zuvor

55
00:03:25,390 --> 00:03:27,183
‫in catch async einschließen.

56
00:03:30,690 --> 00:03:33,263
‫Speichern Sie es und der Fehler sollte verschwunden sein.

57
00:03:35,280 --> 00:03:36,710
‫Lassen Sie uns dann im nächsten Schritt

58
00:03:36,710 --> 00:03:38,103
‫überprüfen, ob der Benutzer existiert.

59
00:03:39,160 --> 00:03:44,160
‫Wenn also kein Benutzer vorhanden ist, dann kehren Sie natürlich mit einem

60
00:03:48,950 --> 00:03:51,790
‫neuen Fehler zur nächsten Middleware zurück.

61
00:03:51,790 --> 00:03:56,790
‫Ist kein Benutzer mit dieser E-Mail-Adresse.

62
00:03:59,190 --> 00:04:02,510
‫Und dann können wir einen 404 setzen, was, wie Sie bereits

63
00:04:02,510 --> 00:04:04,023
‫wissen, nicht gefunden bedeutet.

64
00:04:05,567 --> 00:04:09,310
‫Als Nächstes generieren wir das zufällige Token und

65
00:04:09,310 --> 00:04:11,600
‫dafür erstellen wir noch

66
00:04:11,600 --> 00:04:14,610
‫einmal eine Instant-Methode für den Benutzer.

67
00:04:14,610 --> 00:04:17,430
‫Denn auch das hat wirklich mit den

68
00:04:17,430 --> 00:04:19,183
‫Benutzerdaten selbst zu tun.

69
00:04:20,280 --> 00:04:22,660
‫Und wir werden wirklich ein bisschen Code

70
00:04:22,660 --> 00:04:25,160
‫schreiben, und wenn es also nur eine Codezeile wäre,

71
00:04:25,160 --> 00:04:27,600
‫dann könnten wir sie natürlich gleich hier einfügen.

72
00:04:27,600 --> 00:04:29,540
‫Aber wir brauchen ein paar Zeilen

73
00:04:29,540 --> 00:04:31,830
‫Code und daher ist es wieder ein bisschen

74
00:04:31,830 --> 00:04:34,080
‫sauberer, ihn in seine eigene Funktion zu unterteilen.

75
00:04:34,080 --> 00:04:37,823
‫Und das ist normalerweise mit Mungo am besten als Sofortmethode.

76
00:04:40,500 --> 00:04:45,490
‫Also hier unten, lasst uns einfach hier am Ende bearbeiten.

77
00:04:45,490 --> 00:04:50,490
‫Die Punktmethoden des Benutzerschemas erstellen also kein Token zum Zurücksetzen des Kennworts.

78
00:04:57,900 --> 00:04:59,950
‫Ein ziemlich langer und aussagekräftiger Name.

79
00:04:59,950 --> 00:05:02,020
‫Ich mache es gerne so,

80
00:05:02,020 --> 00:05:05,253
‫damit ich genau weiß, womit ich es zu tun habe.

81
00:05:07,600 --> 00:05:11,690
‫Das Token zum Zurücksetzen des Passworts sollte im Grunde eine

82
00:05:11,690 --> 00:05:13,650
‫zufällige Zeichenfolge sein, muss aber

83
00:05:13,650 --> 00:05:17,250
‫gleichzeitig nicht so kryptografisch stark sein wie der zuvor

84
00:05:17,250 --> 00:05:18,433
‫erstellte Passwort-Hash.

85
00:05:19,640 --> 00:05:22,720
‫Wir können einfach die sehr einfache, zufällige

86
00:05:22,720 --> 00:05:25,083
‫Bytes-Funktion des integrierten Kryptomoduls verwenden.

87
00:05:27,350 --> 00:05:30,173
‫Lassen Sie uns fortfahren und das tatsächlich hinzufügen.

88
00:05:35,620 --> 00:05:40,620
‫Crypto erfordert und auch hier handelt es sich um ein integriertes Knotenmodul,

89
00:05:40,870 --> 00:05:43,203
‫sodass Sie nichts installieren müssen.

90
00:05:44,700 --> 00:05:45,800
‫Cool.

91
00:05:45,800 --> 00:05:50,800
‫Nun, lassen Sie uns dann tatsächlich unseren Token generieren.

92
00:05:56,576 --> 00:05:59,913
‫Und dafür verwenden wir Crypto Dot Random Bytes und dann

93
00:06:02,440 --> 00:06:04,750
‫müssen wir hier grundsätzlich die Anzahl der

94
00:06:04,750 --> 00:06:05,893
‫Zeichen angeben.

95
00:06:07,490 --> 00:06:09,530
‫Und dann wandeln wir es am

96
00:06:09,530 --> 00:06:11,823
‫Ende auch in einen hexadezimalen String um.

97
00:06:14,045 --> 00:06:14,910
‫Zwei

98
00:06:17,020 --> 00:06:20,723
‫Strings und dann können wir hier die Hex-Option angeben.

99
00:06:22,060 --> 00:06:23,690
‫Wenn Sie sich jetzt

100
00:06:23,690 --> 00:06:25,360
‫fragen, warum wir dieses Token

101
00:06:25,360 --> 00:06:28,710
‫tatsächlich erstellen, habe ich es wohl noch nicht wirklich erklärt.

102
00:06:28,710 --> 00:06:31,170
‫Im Grunde ist dieses Token das, was

103
00:06:31,170 --> 00:06:34,660
‫wir an den Benutzer senden werden, und es ist wirklich wie ein

104
00:06:34,660 --> 00:06:38,610
‫Reset-Passwort, das der Benutzer dann verwenden kann, um ein neues echtes Passwort zu erstellen.

105
00:06:38,610 --> 00:06:41,690
‫Und natürlich hat nur der Benutzer Zugriff auf dieses Token.

106
00:06:41,690 --> 00:06:45,363
‫Und so verhält es sich tatsächlich wie ein Passwort.

107
00:06:45,363 --> 00:06:48,380
‫Da es sich im Wesentlichen nur um ein Passwort

108
00:06:48,380 --> 00:06:52,210
‫handelt, bedeutet dies, dass, wenn ein Hacker Zugriff auf unsere Datenbank

109
00:06:52,210 --> 00:06:55,000
‫erhält, der Hacker Zugriff auf das Konto erhält,

110
00:06:55,000 --> 00:06:57,483
‫indem er ein neues Passwort setzt.

111
00:06:59,474 --> 00:07:01,740
‫Wenn wir dieses Reset-Token jetzt einfach in

112
00:07:01,740 --> 00:07:05,160
‫unserer Datenbank speichern würden, dann könnte ein Angreifer, wenn er Zugriff

113
00:07:05,160 --> 00:07:07,200
‫auf die Datenbank erhält, diesen Token verwenden

114
00:07:07,200 --> 00:07:10,090
‫und ein neues Passwort mit diesem Token erstellen, anstatt

115
00:07:10,090 --> 00:07:11,690
‫dass Sie es tun.

116
00:07:11,690 --> 00:07:14,120
‫Sie würden dann Ihr Konto effektiv kontrollieren, anstatt

117
00:07:14,120 --> 00:07:15,563
‫dass Sie es tun.

118
00:07:16,810 --> 00:07:19,150
‫Genau wie ein Passwort sollten wir

119
00:07:19,150 --> 00:07:21,933
‫niemals ein einfaches Reset-Token in der Datenbank speichern.

120
00:07:23,030 --> 00:07:24,670
‫Lassen Sie es uns

121
00:07:24,670 --> 00:07:26,880
‫tatsächlich verschlüsseln, aber wie zuvor mit

122
00:07:26,880 --> 00:07:29,670
‫dem Passwort braucht es keine so kryptografisch

123
00:07:29,670 --> 00:07:30,803
‫starke Verschlüsselungsmethode.

124
00:07:31,640 --> 00:07:34,653
‫Denn diese Reset-Token sind ein weitaus weniger

125
00:07:34,653 --> 00:07:35,993
‫gefährlicher Angriffsvektor.

126
00:07:37,050 --> 00:07:39,230
‫Auch hier verwenden wir nur das

127
00:07:39,230 --> 00:07:40,233
‫eingebaute Kryptomodul.

128
00:07:41,610 --> 00:07:44,213
‫Es funktioniert auf diese seltsam aussehende Art und Weise.

129
00:07:45,420 --> 00:07:48,740
‫Wir sagen, dass Krypto dann Hash mit

130
00:07:51,170 --> 00:07:54,550
‫dem sha 256-Algorithmus erstellt, dann müssen wir aktualisieren

131
00:07:55,750 --> 00:07:57,560
‫und dann variabel

132
00:07:57,560 --> 00:08:00,593
‫sagen, wo das Token gespeichert ist.

133
00:08:01,840 --> 00:08:04,340
‫Welche Zeichenfolge wir grundsätzlich verschlüsseln möchten.

134
00:08:04,340 --> 00:08:08,570
‫Und dann müssen wir Digest sagen und dann

135
00:08:08,570 --> 00:08:10,433
‫wieder hexadezimal speichern.

136
00:08:12,950 --> 00:08:16,660
‫Und wo werden wir diesen Reset-Token nun eigentlich speichern?

137
00:08:16,660 --> 00:08:19,883
‫Nun, wir werden ein neues Feld in unserem Datenbankschema erstellen.

138
00:08:20,886 --> 00:08:23,340
‫Denn natürlich wollen wir es in der Datenbank speichern,

139
00:08:23,340 --> 00:08:24,940
‫um es dann mit dem

140
00:08:24,940 --> 00:08:27,003
‫vom Benutzer bereitgestellten Token vergleichen zu können.

141
00:08:30,037 --> 00:08:30,870
‫Machen wir das hier am Ende.

142
00:08:34,599 --> 00:08:36,349
‫Token zum Zurücksetzen des Kennworts, das

143
00:08:39,884 --> 00:08:41,248
‫ist die Zeichenfolge.

144
00:08:41,248 --> 00:08:44,331
‫Und dann läuft auch das Zurücksetzen des Passworts ab.

145
00:08:49,890 --> 00:08:51,780
‫Denn dieser Reset

146
00:08:51,780 --> 00:08:56,100
‫läuft aus Sicherheitsgründen tatsächlich nach einer gewissen Zeit ab.

147
00:08:56,100 --> 00:08:58,820
‫Sie haben nur 10 Minuten Zeit, um Ihr

148
00:08:58,820 --> 00:09:00,133
‫Passwort tatsächlich zurückzusetzen.

149
00:09:03,850 --> 00:09:05,500
‫Lassen Sie uns nun fortfahren und diese verwenden.

150
00:09:06,950 --> 00:09:11,950
‫Dieses Dot-Passwort-Reset-Token ist dann dieser Verschlüsselung

151
00:09:13,440 --> 00:09:14,843
‫gleich.

152
00:09:19,270 --> 00:09:23,720
‫Als nächstes setzen wir das Passwort zurücksetzen abläuft ab

153
00:09:24,570 --> 00:09:29,400
‫und setzen es auf den Datumspunkt jetzt und fügen dann

154
00:09:29,400 --> 00:09:32,193
‫einfach ein paar Sekunden hinzu.

155
00:09:33,510 --> 00:09:35,910
‫Wir wollen, dass es 10 Minuten

156
00:09:35,910 --> 00:09:40,093
‫lang funktioniert, also sind das 10 und dann brauchen wir es in Millisekunden.

157
00:09:41,270 --> 00:09:46,270
‫Mal 60 für Sekunden und dann mal 1000 für Millisekunden.

158
00:09:49,124 --> 00:09:52,320
‫Und dann möchte ich auch das Klartext-Token zurückgeben, denn das

159
00:09:52,320 --> 00:09:54,770
‫ist tatsächlich das, das wir per E-Mail

160
00:09:54,770 --> 00:09:55,783
‫senden werden.

161
00:09:58,080 --> 00:10:01,863
‫Zurücksetzen-Token zurückgeben.

162
00:10:06,345 --> 00:10:08,860
‫Wir müssen den Reset-Token unverschlüsselt

163
00:10:08,860 --> 00:10:11,660
‫per E-Mail versenden, da es sonst nicht

164
00:10:11,660 --> 00:10:14,503
‫viel Sinn machen würde, ihn zu verschlüsseln.

165
00:10:15,430 --> 00:10:17,090
‫Wenn das Token, das

166
00:10:17,090 --> 00:10:19,290
‫sich in der Datenbank befand, genau das gleiche

167
00:10:19,290 --> 00:10:20,980
‫wäre, mit dem wir das Passwort

168
00:10:20,980 --> 00:10:23,643
‫tatsächlich ändern könnten, dann wäre das überhaupt keine Verschlüsselung.

169
00:10:24,640 --> 00:10:26,417
‫Wir haben einen Token per E-Mail

170
00:10:26,417 --> 00:10:29,420
‫gesendet und dann haben wir die verschlüsselte Version in unserer Datenbank.

171
00:10:29,420 --> 00:10:32,210
‫Und dieser verschlüsselte ist dann im Grunde nutzlos,

172
00:10:32,210 --> 00:10:34,050
‫um das Passwort zu ändern.

173
00:10:34,050 --> 00:10:36,250
‫Es ist genau so,

174
00:10:36,250 --> 00:10:39,470
‫als würden wir nur das verschlüsselte Passwort

175
00:10:39,470 --> 00:10:43,230
‫selbst in der Datenbank speichern, genau wie hier oben,

176
00:10:43,230 --> 00:10:46,967
‫also wo wir das Passwort mit bcrypt verschlüsselt haben.

177
00:10:48,439 --> 00:10:51,100
‫Denken Sie daran, dass Sie sensible Daten immer

178
00:10:51,100 --> 00:10:53,680
‫nur in verschlüsselter Form speichern und diese

179
00:10:53,680 --> 00:10:56,620
‫dann mit der verschlüsselten Version vergleichen, die sich in

180
00:10:56,620 --> 00:10:57,770
‫der Datenbank befindet.

181
00:11:00,385 --> 00:11:02,500
‫Loggen Sie diese beiden einfach

182
00:11:02,500 --> 00:11:06,730
‫in die Konsole ein, die unser Leben ein bisschen einfacher machen werden.

183
00:11:06,730 --> 00:11:09,630
‫Sagen wir, Token zurücksetzen und ich melde

184
00:11:10,470 --> 00:11:11,440
‫mich hier

185
00:11:11,440 --> 00:11:14,930
‫als Objekt an, weil es mir dann tatsächlich den

186
00:11:14,930 --> 00:11:17,803
‫Variablennamen zusammen mit seinem Wert mitteilt.

187
00:11:20,210 --> 00:11:25,153
‫Und dann das gleiche mit diesem Punkt-Passwort-Reset-Token.

188
00:11:28,030 --> 00:11:29,880
‫Dieser funktioniert nicht wirklich mit dem

189
00:11:29,880 --> 00:11:32,340
‫Schreiben von Objekten, dieser neue ES6-Weg und

190
00:11:32,340 --> 00:11:34,140
‫belassen wir es dabei.

191
00:11:36,550 --> 00:11:38,080
‫Wie auch immer, lass uns

192
00:11:38,080 --> 00:11:40,153
‫einfach hierher zurückkommen und dann diese Funktion verwenden.

193
00:11:41,660 --> 00:11:44,930
‫Denken Sie also daran, wie wir das Reset-Token zurückgegeben haben,

194
00:11:44,930 --> 00:11:46,653
‫und speichern wir es hier.

195
00:11:48,040 --> 00:11:52,873
‫Der Reset-Token ist also gleich dem Benutzerpunktsatz und ich bin mir des

196
00:11:54,370 --> 00:11:56,373
‫Namens nicht mehr sicher.

197
00:11:58,500 --> 00:12:00,560
‫Erstellen Sie ein Token zum Zurücksetzen des Kennworts, das

198
00:12:00,560 --> 00:12:01,633
‫ist also ein langer.

199
00:12:03,430 --> 00:12:06,240
‫Alles klar und so ist das

200
00:12:06,240 --> 00:12:09,460
‫erledigt, aber eigentlich haben wir nur die

201
00:12:09,460 --> 00:12:10,943
‫Daten hier geändert.

202
00:12:12,780 --> 00:12:16,580
‫Wenn wir dieses Punkt-Passwort zum Beispiel auf diesen

203
00:12:16,580 --> 00:12:19,040
‫Wert setzen, haben wir das Dokument

204
00:12:19,040 --> 00:12:20,880
‫tatsächlich nicht aktualisiert.

205
00:12:20,880 --> 00:12:22,063
‫Wir haben es nicht gespeichert.

206
00:12:23,100 --> 00:12:24,880
‫Wir modifizieren es eigentlich

207
00:12:24,880 --> 00:12:27,563
‫nur, aber jetzt müssen wir es speichern.

208
00:12:29,950 --> 00:12:34,653
‫Nehmen wir an, Benutzer warten auf Punktspeicherung.

209
00:12:36,750 --> 00:12:39,583
‫Aber beobachten Sie, was passiert, wenn wir dies jetzt verwenden.

210
00:12:43,910 --> 00:12:46,463
‫Nehmen wir einfach dieses hier.

211
00:12:50,980 --> 00:12:53,080
‫Dies ist die Route, die wir zuvor gefunden haben.

212
00:12:54,440 --> 00:12:57,750
‫Und jetzt bekommen wir diese Route noch nicht definiert.

213
00:12:57,750 --> 00:12:59,413
‫Mal sehen, warum das so ist.

214
00:13:00,290 --> 00:13:04,740
‫In der Benutzerroute haben wir hier eindeutig die gleiche URL, aber

215
00:13:04,740 --> 00:13:08,463
‫ich sehe, dass wir tatsächlich eine Postanfrage stellen müssen.

216
00:13:09,390 --> 00:13:13,380
‫Alles klar, okay, aber jetzt erhalten wir eine Fehlermeldung, die besagt,

217
00:13:13,380 --> 00:13:16,200
‫dass Sie bitte E-Mail und Passwort angeben.

218
00:13:16,200 --> 00:13:18,320
‫Und das meinte ich, als ich sagte, pass

219
00:13:18,320 --> 00:13:20,343
‫auf, was passiert, wenn du das versuchst.

220
00:13:21,990 --> 00:13:25,330
‫Dies geschieht, weil wir versuchen, ein Dokument zu speichern,

221
00:13:25,330 --> 00:13:28,860
‫aber nicht alle obligatorischen Daten angeben, also die Felder,

222
00:13:28,860 --> 00:13:31,453
‫die wir als erforderlich markiert haben.

223
00:13:32,502 --> 00:13:34,683
‫Lass uns das schnell beheben.

224
00:13:35,848 --> 00:13:38,888
‫Alles, was wir tun müssen, ist, eine spezielle

225
00:13:38,888 --> 00:13:41,643
‫Option an diese Benutzerpunktspeichermethode zu übergeben.

226
00:13:43,140 --> 00:13:43,973
‫Wir

227
00:13:47,210 --> 00:13:48,720
‫sagen validieren, bevor das Speichern

228
00:13:49,890 --> 00:13:51,293
‫auf false gesetzt wird.

229
00:13:52,332 --> 00:13:55,260
‫Dadurch werden alle Validierer, die wir in unserem

230
00:13:55,260 --> 00:13:56,993
‫Schema angegeben haben, deaktiviert.

231
00:13:58,540 --> 00:14:01,100
‫Es sind diese kleinen Dinge, die Sie wissen

232
00:14:01,100 --> 00:14:02,800
‫müssen, die den Unterschied ausmachen.

233
00:14:03,790 --> 00:14:06,570
‫Jetzt wusste ich auch nicht, dass es das

234
00:14:06,570 --> 00:14:09,170
‫gibt, weil niemand wirklich alles weiß.

235
00:14:09,170 --> 00:14:10,260
‫Es ist unmöglich.

236
00:14:10,260 --> 00:14:13,010
‫Eine Bibliothek wie Mongoose ist einfach viel zu

237
00:14:13,010 --> 00:14:14,833
‫groß, um alles zu wissen.

238
00:14:16,010 --> 00:14:19,020
‫Ich habe die Mongoose-Dokumentation gelesen

239
00:14:19,020 --> 00:14:22,710
‫und dort diese äußerst hilfreiche Option gefunden.

240
00:14:22,710 --> 00:14:25,050
‫All dies nur, um noch einmal zu

241
00:14:25,050 --> 00:14:26,520
‫sagen, dass niemand alles

242
00:14:26,520 --> 00:14:28,520
‫weiß, und daher ist es wirklich

243
00:14:28,520 --> 00:14:29,960
‫eine gute Angewohnheit,

244
00:14:29,960 --> 00:14:31,830
‫bei Problemen einen Blick in die

245
00:14:31,830 --> 00:14:34,210
‫Dokumentation der Bibliothek zu werfen, die Sie verwenden.

246
00:14:34,210 --> 00:14:35,963
‫Schauen wir uns das jetzt an.

247
00:14:39,410 --> 00:14:42,260
‫Und wir bekommen hier immer noch den gleichen Fehler, aber

248
00:14:42,260 --> 00:14:43,890
‫ich sehe hier unten,

249
00:14:43,890 --> 00:14:45,883
‫dass er tatsächlich von der Login-Funktion kommt.

250
00:14:48,210 --> 00:14:50,573
‫Schauen wir uns an, was hier vor sich geht.

251
00:14:51,490 --> 00:14:54,550
‫Werfen wir auch einen Blick auf die Routen.

252
00:14:54,550 --> 00:14:56,343
‫Ah, okay, hier ist das Problem.

253
00:14:57,610 --> 00:14:59,420
‫Wir versuchen jetzt, den

254
00:14:59,420 --> 00:15:02,170
‫Login-Handler aufzurufen, was natürlich keinen Sinn macht.

255
00:15:03,660 --> 00:15:05,790
‫Hier ist es Passwort vergessen.

256
00:15:05,790 --> 00:15:07,633
‫Hier ist es das Passwort zurücksetzen.

257
00:15:08,850 --> 00:15:12,290
‫Der Fehler, den wir zuvor bekamen, lag also nicht

258
00:15:12,290 --> 00:15:13,463
‫an der Validierung.

259
00:15:16,312 --> 00:15:17,980
‫Senden wir dies noch einmal und

260
00:15:17,980 --> 00:15:20,100
‫jetzt erhalten wir die Fehlermeldung, dass es

261
00:15:20,100 --> 00:15:21,420
‫keinen Benutzer mit

262
00:15:21,420 --> 00:15:24,140
‫dieser E-Mail-Adresse gibt und das liegt daran, dass wir

263
00:15:24,140 --> 00:15:26,103
‫im Textkörper keine E-Mail-Adresse angegeben haben.

264
00:15:28,390 --> 00:15:29,680
‫Wir haben das

265
00:15:29,680 --> 00:15:32,300
‫getestet und jetzt ist es an der Zeit,

266
00:15:32,300 --> 00:15:34,093
‫es mit einer Benutzer-E-Mail zu testen.

267
00:15:43,409 --> 00:15:44,440
‫Gut.

268
00:15:44,440 --> 00:15:46,380
‫Und jetzt sollte es

269
00:15:46,380 --> 00:15:49,320
‫eigentlich nichts tun, weil wir keine Antwort zurücksenden.

270
00:15:49,320 --> 00:15:50,700
‫Lassen Sie uns das

271
00:15:50,700 --> 00:15:52,540
‫einfach abbrechen, denn alles, was mich

272
00:15:52,540 --> 00:15:55,227
‫wirklich interessiert hat, ist, diese Token hier zu sehen und

273
00:15:55,227 --> 00:15:57,830
‫dann auch einen Blick auf das Benutzerobjekt zu werfen.

274
00:15:57,830 --> 00:16:01,050
‫Dies hier ist das ursprüngliche Reset-Token, also sehen Sie,

275
00:16:01,050 --> 00:16:04,150
‫dass es ein zufälliger hexadezimaler String ist und dann

276
00:16:04,150 --> 00:16:06,593
‫haben wir den verschlüsselten hier drin.

277
00:16:07,840 --> 00:16:11,330
‫Diese Erinnerung ist diejenige, die nicht in der Datenbank enthalten

278
00:16:11,330 --> 00:16:13,663
‫sein sollte und auf a901 endet.

279
00:16:14,930 --> 00:16:16,230
‫Schauen wir uns das an.

280
00:16:18,410 --> 00:16:20,460
‫Und tatsächlich, hier

281
00:16:20,460 --> 00:16:24,740
‫ist es, Passwort-Reset-Token mit der Endung a901.

282
00:16:24,740 --> 00:16:28,960
‫Und auch das Datum, das tatsächlich in 10 Minuten liegt.

283
00:16:28,960 --> 00:16:31,753
‫Jetzt wissen Sie, zu welcher Zeit ich dieses Video aufnehme.

284
00:16:33,130 --> 00:16:35,340
‫Wie auch immer, aber das hat gut funktioniert.

285
00:16:35,340 --> 00:16:37,890
‫Dies ist also der erste

286
00:16:37,890 --> 00:16:41,561
‫Teil der Erstellung dieser Funktion zum Zurücksetzen des Kennworts.

287
00:16:41,561 --> 00:16:43,140
‫Im nächsten Video werden wir

288
00:16:43,140 --> 00:16:46,840
‫diesen Token dann hier per E-Mail an den Benutzer senden und haben

289
00:16:46,840 --> 00:16:49,500
‫so eigentlich ein separates Video vorbereitet, nur um

290
00:16:49,500 --> 00:16:52,370
‫zu lernen, wie man tatsächlich E-Mails mit Knoten an

291
00:16:52,370 --> 00:16:53,470
‫js sendet.

292
00:16:53,470 --> 00:16:55,100
‫Das macht sehr viel

293
00:16:55,100 --> 00:16:58,363
‫Spaß, also warten Sie nicht, um sofort dorthin zu ziehen.

