﻿1
00:00:01,190 --> 00:00:03,320
‫Instructeur : Dans cette vidéo et les

2
00:00:03,320 --> 00:00:05,380
‫suivantes, nous allons implémenter une fonctionnalité

3
00:00:05,380 --> 00:00:08,670
‫de réinitialisation de mot de passe conviviale, qui est en quelque

4
00:00:08,670 --> 00:00:11,253
‫sorte la norme dans la plupart des applications Web.

5
00:00:12,750 --> 00:00:15,390
‫Et probablement, vous avez déjà utilisé la réinitialisation du mot

6
00:00:15,390 --> 00:00:17,720
‫de passe sur un site Web et cela

7
00:00:17,720 --> 00:00:19,140
‫fonctionne généralement comme ceci.

8
00:00:19,140 --> 00:00:21,280
‫Il vous suffit de fournir votre adresse

9
00:00:21,280 --> 00:00:23,490
‫e-mail et vous recevrez ensuite un e-mail avec

10
00:00:23,490 --> 00:00:25,950
‫un lien sur lequel vous pourrez cliquer, puis cela vous

11
00:00:25,950 --> 00:00:29,410
‫mènera à une page où vous pourrez saisir un nouveau mot de passe.

12
00:00:29,410 --> 00:00:32,270
‫Il s'agit d'une procédure très standard et c'est donc

13
00:00:32,270 --> 00:00:34,160
‫également ainsi que nous allons l'implémenter

14
00:00:34,160 --> 00:00:35,890
‫ici dans cette application.

15
00:00:35,890 --> 00:00:37,700
‫Fondamentalement, il y a deux étapes.

16
00:00:37,700 --> 00:00:40,930
‫Pour le premier, l'utilisateur envoie une demande de publication

17
00:00:40,930 --> 00:00:45,260
‫à un itinéraire de mot de passe oublié, uniquement avec cette adresse e-mail.

18
00:00:45,260 --> 00:00:47,510
‫Cela créera ensuite un jeton de

19
00:00:47,510 --> 00:00:50,830
‫réinitialisation et l'enverra à l'adresse e-mail qui a été fournie.

20
00:00:50,830 --> 00:00:54,930
‫Juste un jeton aléatoire simple, pas un jeton Web JSON.

21
00:00:54,930 --> 00:00:56,610
‫C'est une différence ici.

22
00:00:56,610 --> 00:00:59,507
‫Ensuite, dans la deuxième partie, qui sera la prochaine

23
00:00:59,507 --> 00:01:02,800
‫vidéo, l'utilisateur envoie ensuite ce jeton depuis son e-mail avec un

24
00:01:02,800 --> 00:01:06,553
‫nouveau mot de passe afin de mettre à jour son mot de passe.

25
00:01:08,040 --> 00:01:13,040
‫Fondamentalement, nous aurons des exportations avec mot de passe oublié, ce qui est

26
00:01:14,810 --> 00:01:16,173
‫la première étape.

27
00:01:17,930 --> 00:01:22,930
‫Donc, demande, réponse et ensuite, puis dans un deuxième temps, nous

28
00:01:25,560 --> 00:01:28,703
‫avons réinitialisé le mot de passe.

29
00:01:33,480 --> 00:01:37,260
‫Ensuite, allons également de l'avant et implémentons ces deux routes.

30
00:01:37,260 --> 00:01:40,520
‫D'accord, et c'est, bien sûr, dans leur fichier de routeur utilisateur

31
00:01:40,520 --> 00:01:42,053
‫ou de routes utilisateur.

32
00:01:43,190 --> 00:01:45,640
‫Mettons-les également ici et en

33
00:01:45,640 --> 00:01:48,793
‫fait, je peux simplement dupliquer ces lignes ici.

34
00:01:51,131 --> 00:01:54,593
‫Nous avons donc à nouveau oublié le mot

35
00:01:55,820 --> 00:01:58,170
‫de passe, qui ne

36
00:01:58,170 --> 00:02:03,170
‫recevra que l'adresse e-mail puis réinitialisera le mot de passe, qui recevra

37
00:02:03,260 --> 00:02:06,983
‫le jeton ainsi que le nouveau mot de passe.

38
00:02:09,360 --> 00:02:10,530
‫C'est celui que

39
00:02:10,530 --> 00:02:13,220
‫nous allons commencer à mettre en œuvre dans cette conférence.

40
00:02:13,220 --> 00:02:17,570
‫Comme avant, précisons nos étapes ici.

41
00:02:17,570 --> 00:02:20,510
‫Donc, d'abord, obtenez l'utilisateur en

42
00:02:23,180 --> 00:02:25,890
‫fonction de l'e-mail publié,

43
00:02:29,590 --> 00:02:32,383
‫puis générez le jeton aléatoire.

44
00:02:37,090 --> 00:02:40,043
‫Et puis renvoyez-le par e-mail.

45
00:02:45,910 --> 00:02:48,793
‫Ce truc est assez commun pour nous à ce stade.

46
00:02:49,680 --> 00:02:54,397
‫Donc utilisateur, attendons donc l'utilisateur dot find et maintenant il s'agit d'en trouver

47
00:02:55,330 --> 00:02:57,650
‫un, pas de trouver par

48
00:02:57,650 --> 00:03:00,920
‫identifiant car nous ne connaissons pas l'identifiant de l'utilisateur.

49
00:03:00,920 --> 00:03:04,240
‫Et l'utilisateur, bien sûr, ne connaît pas non plus son propre

50
00:03:04,240 --> 00:03:06,733
‫identifiant et nous avons donc spécifié l'adresse e-mail.

51
00:03:08,390 --> 00:03:11,363
‫Fondamentalement, c'est la seule donnée connue.

52
00:03:12,230 --> 00:03:16,823
‫Et c'est l'adresse e-mail de point body dot sur demande.

53
00:03:18,723 --> 00:03:20,580
‫Et bien sûr, maintenant, nous

54
00:03:20,580 --> 00:03:25,390
‫devons dire que nous sommes dans une fonction asynchrone, puis comme avant,

55
00:03:25,390 --> 00:03:27,183
‫enveloppons-la dans catch async.

56
00:03:30,690 --> 00:03:33,263
‫Faites une sauvegarde et l'erreur devrait disparaître.

57
00:03:35,280 --> 00:03:36,710
‫Ensuite, étape suivante, vérifions

58
00:03:36,710 --> 00:03:38,103
‫si l'utilisateur existe.

59
00:03:39,160 --> 00:03:44,160
‫Donc s'il n'y a pas d'utilisateur, retournez au middleware suivant avec

60
00:03:48,950 --> 00:03:51,790
‫bien sûr une nouvelle erreur.

61
00:03:51,790 --> 00:03:56,790
‫Il n'y a pas d'utilisateur avec cette adresse e-mail.

62
00:03:59,190 --> 00:04:02,510
‫Et puis on peut mettre un 404, ce qui, comme vous

63
00:04:02,510 --> 00:04:04,023
‫le savez déjà, signifie introuvable.

64
00:04:05,567 --> 00:04:09,310
‫Ensuite, générons le jeton aléatoire et pour cela, une

65
00:04:09,310 --> 00:04:11,600
‫fois de plus, nous

66
00:04:11,600 --> 00:04:14,610
‫allons créer une méthode instantanée sur l'utilisateur.

67
00:04:14,610 --> 00:04:17,430
‫Parce qu'une fois de plus, cela a vraiment à voir

68
00:04:17,430 --> 00:04:19,183
‫avec les données de l'utilisateur elles-mêmes.

69
00:04:20,280 --> 00:04:22,660
‫Et nous allons vraiment écrire un peu de

70
00:04:22,660 --> 00:04:25,160
‫code, et donc, si ce n'était qu'une seule ligne de

71
00:04:25,160 --> 00:04:27,600
‫code, alors bien sûr, nous pourrions simplement la mettre ici.

72
00:04:27,600 --> 00:04:29,540
‫Mais nous avons besoin de quelques lignes

73
00:04:29,540 --> 00:04:31,830
‫de code et encore une fois, c'est un peu

74
00:04:31,830 --> 00:04:34,080
‫plus propre de le séparer dans sa propre fonction.

75
00:04:34,080 --> 00:04:37,823
‫Et cela, généralement avec Mongoose, est préférable en tant que méthode instantanée.

76
00:04:40,500 --> 00:04:45,490
‫Donc ici en bas, modifions juste ici à la fin.

77
00:04:45,490 --> 00:04:50,490
‫Ainsi, les méthodes de point de schéma utilisateur ne créent pas un jeton de réinitialisation de mot de passe.

78
00:04:57,900 --> 00:04:59,950
‫Un nom assez long et descriptif.

79
00:04:59,950 --> 00:05:02,020
‫J'aime faire comme ça,

80
00:05:02,020 --> 00:05:05,253
‫pour savoir exactement à quoi j'ai affaire.

81
00:05:07,600 --> 00:05:11,690
‫Le jeton de réinitialisation de mot de passe doit essentiellement être une chaîne aléatoire, mais

82
00:05:11,690 --> 00:05:13,650
‫en même temps, il n'a pas besoin

83
00:05:13,650 --> 00:05:17,250
‫d'être aussi fort cryptographiquement que le hachage de mot de passe que nous

84
00:05:17,250 --> 00:05:18,433
‫avons créé auparavant.

85
00:05:19,640 --> 00:05:22,720
‫Nous pouvons simplement utiliser la fonction d'octets aléatoires

86
00:05:22,720 --> 00:05:25,083
‫très simple du module crypto intégré.

87
00:05:27,350 --> 00:05:30,173
‫Allons de l'avant et ajoutons cela.

88
00:05:35,620 --> 00:05:40,620
‫Crypto nécessite et encore une fois, il s'agit d'un module de nœud intégré, donc pas

89
00:05:40,870 --> 00:05:43,203
‫besoin d'installer quoi que ce soit.

90
00:05:44,700 --> 00:05:45,800
‫Frais.

91
00:05:45,800 --> 00:05:50,800
‫Maintenant, générons notre jeton.

92
00:05:56,576 --> 00:05:59,913
‫Et pour cela, nous utilisons des octets aléatoires de points cryptographiques,

93
00:06:02,440 --> 00:06:04,750
‫puis nous devons spécifier le nombre de

94
00:06:04,750 --> 00:06:05,893
‫caractères en gros.

95
00:06:07,490 --> 00:06:09,530
‫Et puis à la fin, nous

96
00:06:09,530 --> 00:06:11,823
‫le convertissons également en une chaîne hexadécimale.

97
00:06:14,045 --> 00:06:14,910
‫Deux

98
00:06:17,020 --> 00:06:20,723
‫chaînes, puis nous pouvons spécifier l'option hexadécimale ici.

99
00:06:22,060 --> 00:06:23,690
‫Maintenant, si vous vous

100
00:06:23,690 --> 00:06:25,360
‫demandez pourquoi nous créons réellement ce

101
00:06:25,360 --> 00:06:28,710
‫jeton, je suppose que je ne l'ai pas encore vraiment expliqué.

102
00:06:28,710 --> 00:06:31,170
‫Fondamentalement, ce jeton est ce que nous allons

103
00:06:31,170 --> 00:06:34,660
‫envoyer à l'utilisateur et c'est donc comme un mot de passe de

104
00:06:34,660 --> 00:06:38,610
‫réinitialisation que l'utilisateur peut ensuite utiliser pour créer un nouveau mot de passe réel.

105
00:06:38,610 --> 00:06:41,690
‫Et bien entendu, seul l'utilisateur aura accès à ce token.

106
00:06:41,690 --> 00:06:45,363
‫Et donc en fait, il se comporte vraiment comme un mot de passe.

107
00:06:45,363 --> 00:06:48,380
‫Puisqu'il ne s'agit essentiellement que d'un mot de passe, cela

108
00:06:48,380 --> 00:06:52,210
‫signifie que si un pirate informatique peut accéder à notre base de données,

109
00:06:52,210 --> 00:06:55,000
‫cela permettra au pirate informatique d'accéder au compte

110
00:06:55,000 --> 00:06:57,483
‫en définissant un nouveau mot de passe.

111
00:06:59,474 --> 00:07:01,740
‫Si nous stockions simplement ce jeton de réinitialisation dans

112
00:07:01,740 --> 00:07:05,160
‫notre base de données maintenant, alors si un attaquant accède à la base de

113
00:07:05,160 --> 00:07:07,200
‫données, il pourrait alors utiliser ce jeton et

114
00:07:07,200 --> 00:07:10,090
‫créer un nouveau mot de passe en utilisant ce jeton au

115
00:07:10,090 --> 00:07:11,690
‫lieu de vous le faire.

116
00:07:11,690 --> 00:07:14,120
‫Ils contrôleraient alors efficacement votre compte au lieu

117
00:07:14,120 --> 00:07:15,563
‫que vous le fassiez.

118
00:07:16,810 --> 00:07:19,150
‫Tout comme un mot de passe, nous ne devons

119
00:07:19,150 --> 00:07:21,933
‫jamais stocker un jeton de réinitialisation simple dans la base de données.

120
00:07:23,030 --> 00:07:24,670
‫Chiffrons-le en fait, mais comme

121
00:07:24,670 --> 00:07:26,880
‫auparavant avec le mot de passe, il n'a

122
00:07:26,880 --> 00:07:29,670
‫pas besoin d'une méthode de chiffrement aussi forte du point

123
00:07:29,670 --> 00:07:30,803
‫de vue cryptographique.

124
00:07:31,640 --> 00:07:34,653
‫Parce que ces jetons de réinitialisation sont un vecteur

125
00:07:34,653 --> 00:07:35,993
‫d'attaque beaucoup moins dangereux.

126
00:07:37,050 --> 00:07:39,230
‫Encore une fois, nous allons simplement utiliser le

127
00:07:39,230 --> 00:07:40,233
‫module crypto intégré.

128
00:07:41,610 --> 00:07:44,213
‫Cela fonctionne de cette manière étrange.

129
00:07:45,420 --> 00:07:48,740
‫Nous disons crypto puis créons un hachage

130
00:07:51,170 --> 00:07:54,550
‫avec l'algorithme sha 256, puis nous devons dire

131
00:07:55,750 --> 00:07:57,560
‫mise à jour,

132
00:07:57,560 --> 00:08:00,593
‫puis variable où le jeton est stocké.

133
00:08:01,840 --> 00:08:04,340
‫Quelle que soit la chaîne que nous voulons crypter essentiellement.

134
00:08:04,340 --> 00:08:08,570
‫Et puis nous devons dire digérer, puis le stocker à

135
00:08:08,570 --> 00:08:10,433
‫nouveau sous forme hexadécimale.

136
00:08:12,950 --> 00:08:16,660
‫Et maintenant, où allons-nous réellement enregistrer ce jeton de réinitialisation ?

137
00:08:16,660 --> 00:08:19,883
‫Eh bien, nous allons créer un nouveau champ dans notre schéma de base de données.

138
00:08:20,886 --> 00:08:23,340
‫Parce que bien sûr, nous voulons l'enregistrer dans la base

139
00:08:23,340 --> 00:08:24,940
‫de données, afin de pouvoir ensuite

140
00:08:24,940 --> 00:08:27,003
‫le comparer avec le jeton fourni par l'utilisateur.

141
00:08:30,037 --> 00:08:30,870
‫Faisons-le ici à la fin.

142
00:08:34,599 --> 00:08:36,349
‫Jeton de réinitialisation de mot de

143
00:08:39,884 --> 00:08:41,248
‫passe, c'est la chaîne.

144
00:08:41,248 --> 00:08:44,331
‫Et puis la réinitialisation du mot de passe expire également.

145
00:08:49,890 --> 00:08:51,780
‫Parce que cette

146
00:08:51,780 --> 00:08:56,100
‫réinitialisation expirera après un certain temps par mesure de sécurité.

147
00:08:56,100 --> 00:08:58,820
‫Vous n'aurez que 10 minutes pour réinitialiser réellement votre

148
00:08:58,820 --> 00:09:00,133
‫mot de passe.

149
00:09:03,850 --> 00:09:05,500
‫Allons-y maintenant et utilisons-les.

150
00:09:06,950 --> 00:09:11,950
‫Ce jeton de réinitialisation de mot de passe par points est alors égal

151
00:09:13,440 --> 00:09:14,843
‫à ce cryptage.

152
00:09:19,270 --> 00:09:23,720
‫Ensuite, définissons l'expiration de la réinitialisation du mot de

153
00:09:24,570 --> 00:09:29,400
‫passe et définissons ce point à jour maintenant, puis ajoutons

154
00:09:29,400 --> 00:09:32,193
‫simplement quelques secondes à cela.

155
00:09:33,510 --> 00:09:35,910
‫Nous voulons que cela fonctionne pendant 10

156
00:09:35,910 --> 00:09:40,093
‫minutes et c'est donc 10 minutes et nous en avons besoin en millisecondes.

157
00:09:41,270 --> 00:09:46,270
‫Fois 60 pour les secondes, puis fois 1000 pour les millisecondes.

158
00:09:49,124 --> 00:09:52,320
‫Et puis je veux aussi renvoyer le jeton en texte brut parce

159
00:09:52,320 --> 00:09:54,770
‫que c'est en fait celui que nous allons

160
00:09:54,770 --> 00:09:55,783
‫envoyer par e-mail.

161
00:09:58,080 --> 00:10:01,863
‫Renvoyez le jeton de réinitialisation.

162
00:10:06,345 --> 00:10:08,860
‫Nous devons envoyer par e-mail le jeton

163
00:10:08,860 --> 00:10:11,660
‫de réinitialisation non crypté, car sinon cela n'aurait

164
00:10:11,660 --> 00:10:14,503
‫pas beaucoup de sens de le crypter du tout.

165
00:10:15,430 --> 00:10:17,090
‫Si le jeton qui se trouvait

166
00:10:17,090 --> 00:10:19,290
‫dans la base de données était exactement le même que

167
00:10:19,290 --> 00:10:20,980
‫celui que nous pourrions utiliser pour changer le

168
00:10:20,980 --> 00:10:23,643
‫mot de passe, alors ce ne serait pas du tout un cryptage.

169
00:10:24,640 --> 00:10:26,417
‫Nous avons envoyé un jeton par

170
00:10:26,417 --> 00:10:29,420
‫e-mail, puis nous avons la version cryptée dans notre base de données.

171
00:10:29,420 --> 00:10:32,210
‫Et celui crypté est alors fondamentalement inutile pour

172
00:10:32,210 --> 00:10:34,050
‫changer le mot de passe.

173
00:10:34,050 --> 00:10:36,250
‫C'est comme lorsque nous enregistrons

174
00:10:36,250 --> 00:10:39,470
‫uniquement le mot de passe crypté lui-même dans la

175
00:10:39,470 --> 00:10:43,230
‫base de données, comme nous l'avons fait ici, donc où nous

176
00:10:43,230 --> 00:10:46,967
‫avons crypté le mot de passe à l'aide de bcrypt.

177
00:10:48,439 --> 00:10:51,100
‫Gardez à l'esprit que les seules données sensibles

178
00:10:51,100 --> 00:10:53,680
‫jamais enregistrées sous une forme cryptée, puis comparez-les

179
00:10:53,680 --> 00:10:56,620
‫avec la version cryptée qui se trouve dans la

180
00:10:56,620 --> 00:10:57,770
‫base de données.

181
00:11:00,385 --> 00:11:02,500
‫Il suffit d'enregistrer ces deux-là sur

182
00:11:02,500 --> 00:11:06,730
‫la console, ce qui nous facilitera un peu la vie par la suite.

183
00:11:06,730 --> 00:11:09,630
‫Disons que je réinitialise le jeton et que je me

184
00:11:10,470 --> 00:11:11,440
‫connecte ici

185
00:11:11,440 --> 00:11:14,930
‫en tant qu'objet, car de cette façon, il me dira alors

186
00:11:14,930 --> 00:11:17,803
‫le nom de la variable ainsi que sa valeur.

187
00:11:20,210 --> 00:11:25,153
‫Et puis la même chose avec ce jeton de réinitialisation de mot de passe par points.

188
00:11:28,030 --> 00:11:29,880
‫Celui-ci ne fonctionne pas vraiment

189
00:11:29,880 --> 00:11:32,340
‫avec l'écriture d'objets, cette nouvelle manière ES6

190
00:11:32,340 --> 00:11:34,140
‫et restons-en là.

191
00:11:36,550 --> 00:11:38,080
‫Quoi qu'il en soit,

192
00:11:38,080 --> 00:11:40,153
‫revenons ici et utilisons ensuite cette fonction.

193
00:11:41,660 --> 00:11:44,930
‫Alors rappelez-vous comment nous avons renvoyé le jeton de

194
00:11:44,930 --> 00:11:46,653
‫réinitialisation, et stockons-le ici.

195
00:11:48,040 --> 00:11:52,873
‫Donc, le jeton de réinitialisation est égal au jeu de points utilisateur et je ne

196
00:11:54,370 --> 00:11:56,373
‫suis plus sûr du nom.

197
00:11:58,500 --> 00:12:00,560
‫Créez un jeton de réinitialisation de mot de

198
00:12:00,560 --> 00:12:01,633
‫passe, donc c'est long.

199
00:12:03,430 --> 00:12:06,240
‫D'accord et c'est fait, mais en fait

200
00:12:06,240 --> 00:12:09,460
‫ce que nous avons fait était juste de modifier

201
00:12:09,460 --> 00:12:10,943
‫les données ici.

202
00:12:12,780 --> 00:12:16,580
‫Lorsque nous avons défini ce point mot de passe expire par exemple à

203
00:12:16,580 --> 00:12:19,040
‫cette valeur, nous n'avons en fait pas vraiment

204
00:12:19,040 --> 00:12:20,880
‫mis à jour le document.

205
00:12:20,880 --> 00:12:22,063
‫Nous ne l'avons pas sauvegardé.

206
00:12:23,100 --> 00:12:24,880
‫Nous ne faisons que le

207
00:12:24,880 --> 00:12:27,563
‫modifier, mais maintenant nous devons ensuite le sauvegarder.

208
00:12:29,950 --> 00:12:34,653
‫Disons que wait user dot save.

209
00:12:36,750 --> 00:12:39,583
‫Mais regardez ce qui se passe alors que nous l'utilisons maintenant.

210
00:12:43,910 --> 00:12:46,463
‫Prenons juste celui-ci ici.

211
00:12:50,980 --> 00:12:53,080
‫C'est l'itinéraire que nous avons déjà trouvé.

212
00:12:54,440 --> 00:12:57,750
‫Et maintenant, nous obtenons que cet itinéraire n'est pas encore défini.

213
00:12:57,750 --> 00:12:59,413
‫Voyons pourquoi.

214
00:13:00,290 --> 00:13:04,740
‫Dans la route utilisateur, nous avons clairement la même URL ici, mais je vois

215
00:13:04,740 --> 00:13:08,463
‫que nous devons en fait faire une demande de publication.

216
00:13:09,390 --> 00:13:13,380
‫D'accord, d'accord, mais maintenant nous obtenons une erreur disant de fournir une

217
00:13:13,380 --> 00:13:16,200
‫adresse e-mail et un mot de passe.

218
00:13:16,200 --> 00:13:18,320
‫Et c'est ce que je voulais dire quand j'ai dit

219
00:13:18,320 --> 00:13:20,343
‫regarde ce qui se passe quand tu essaies ça.

220
00:13:21,990 --> 00:13:25,330
‫Cela se produit parce que nous essayons d'enregistrer un document,

221
00:13:25,330 --> 00:13:28,860
‫mais nous ne spécifions pas toutes les données obligatoires, donc les

222
00:13:28,860 --> 00:13:31,453
‫champs que nous avons marqués comme requis.

223
00:13:32,502 --> 00:13:34,683
‫Corrigeons cela rapidement.

224
00:13:35,848 --> 00:13:38,888
‫Tout ce que nous avons à faire est de passer une

225
00:13:38,888 --> 00:13:41,643
‫option spéciale dans cette méthode d'enregistrement de points utilisateur.

226
00:13:43,140 --> 00:13:43,973
‫Nous

227
00:13:47,210 --> 00:13:48,720
‫disons valider avant le

228
00:13:49,890 --> 00:13:51,293
‫saveset sur false.

229
00:13:52,332 --> 00:13:55,260
‫Cela désactivera ensuite tous les valideurs que nous avons

230
00:13:55,260 --> 00:13:56,993
‫spécifiés dans notre schéma.

231
00:13:58,540 --> 00:14:01,100
‫Ce sont ces petites choses que vous devez savoir

232
00:14:01,100 --> 00:14:02,800
‫qui feront toute la différence.

233
00:14:03,790 --> 00:14:06,570
‫Maintenant, je ne savais pas non plus que cela

234
00:14:06,570 --> 00:14:09,170
‫existait parce que personne ne sait vraiment tout.

235
00:14:09,170 --> 00:14:10,260
‫C'est impossible.

236
00:14:10,260 --> 00:14:13,010
‫Une bibliothèque comme Mongoose est tout simplement trop grande pour que

237
00:14:13,010 --> 00:14:14,833
‫vous sachiez tout ce qu'il y a.

238
00:14:16,010 --> 00:14:19,020
‫Je suis allé de l'avant et j'ai lu la documentation

239
00:14:19,020 --> 00:14:22,710
‫de Mongoose et c'est donc là que j'ai trouvé cette option extrêmement utile.

240
00:14:22,710 --> 00:14:25,050
‫Tout ça pour dire encore une fois, personne

241
00:14:25,050 --> 00:14:26,520
‫ne sait tout et c'est

242
00:14:26,520 --> 00:14:28,520
‫donc vraiment une bonne habitude si

243
00:14:28,520 --> 00:14:29,960
‫vous rencontrez des

244
00:14:29,960 --> 00:14:31,830
‫problèmes de jeter un œil à

245
00:14:31,830 --> 00:14:34,210
‫la documentation de la bibliothèque que vous utilisez.

246
00:14:34,210 --> 00:14:35,963
‫Jetons un coup d'œil à cela maintenant.

247
00:14:39,410 --> 00:14:42,260
‫Et nous obtenons toujours la même erreur ici, mais je

248
00:14:42,260 --> 00:14:43,890
‫vois ici que cela vient

249
00:14:43,890 --> 00:14:45,883
‫en fait de la fonction de connexion.

250
00:14:48,210 --> 00:14:50,573
‫Voyons ce qui se passe ici.

251
00:14:51,490 --> 00:14:54,550
‫Jetons également un œil aux itinéraires.

252
00:14:54,550 --> 00:14:56,343
‫Ah, d'accord, alors voici le problème.

253
00:14:57,610 --> 00:14:59,420
‫Nous essayons maintenant d'appeler le gestionnaire

254
00:14:59,420 --> 00:15:02,170
‫de connexion, ce qui, bien sûr, n'a pas de sens.

255
00:15:03,660 --> 00:15:05,790
‫Ici, c'est le mot de passe oublié.

256
00:15:05,790 --> 00:15:07,633
‫Ici, c'est réinitialiser le mot de passe.

257
00:15:08,850 --> 00:15:12,290
‫Et donc l'erreur que nous avons eue avant n'était en fait pas

258
00:15:12,290 --> 00:15:13,463
‫due à la validation.

259
00:15:16,312 --> 00:15:17,980
‫Renvoyons ceci et maintenant nous

260
00:15:17,980 --> 00:15:20,100
‫obtenons l'erreur qu'il n'y a aucun

261
00:15:20,100 --> 00:15:21,420
‫utilisateur avec cette

262
00:15:21,420 --> 00:15:24,140
‫adresse e-mail et c'est parce que nous n'avons spécifié

263
00:15:24,140 --> 00:15:26,103
‫aucune adresse e-mail dans le corps.

264
00:15:28,390 --> 00:15:29,680
‫Nous avons testé

265
00:15:29,680 --> 00:15:32,300
‫cela et il est maintenant temps de le

266
00:15:32,300 --> 00:15:34,093
‫tester avec un e-mail utilisateur.

267
00:15:43,409 --> 00:15:44,440
‫D'accord.

268
00:15:44,440 --> 00:15:46,380
‫Et maintenant, il ne devrait

269
00:15:46,380 --> 00:15:49,320
‫plus rien faire parce que nous ne renvoyons aucune réponse.

270
00:15:49,320 --> 00:15:50,700
‫Annulons simplement cela

271
00:15:50,700 --> 00:15:52,540
‫car tout ce qui m'intéressait

272
00:15:52,540 --> 00:15:55,227
‫vraiment était de voir ces jetons ici, puis

273
00:15:55,227 --> 00:15:57,830
‫de jeter un œil à l'objet utilisateur.

274
00:15:57,830 --> 00:16:01,050
‫C'est ici le jeton de réinitialisation d'origine, vous voyez

275
00:16:01,050 --> 00:16:04,150
‫donc que c'est une chaîne hexadécimale aléatoire, puis

276
00:16:04,150 --> 00:16:06,593
‫nous avons la chaîne cryptée ici.

277
00:16:07,840 --> 00:16:11,330
‫Ce rappel est celui qui ne devrait pas être dans la base

278
00:16:11,330 --> 00:16:13,663
‫de données, se terminant donc par a901.

279
00:16:14,930 --> 00:16:16,230
‫Jetons un coup d'oeil à cela.

280
00:16:18,410 --> 00:16:20,460
‫Et en effet, le voici,

281
00:16:20,460 --> 00:16:24,740
‫jeton de réinitialisation de mot de passe se terminant par ce a901.

282
00:16:24,740 --> 00:16:28,960
‫Et aussi la date, qui est en fait dans 10 minutes.

283
00:16:28,960 --> 00:16:31,753
‫Vous savez maintenant à quelle heure j'enregistre cette vidéo.

284
00:16:33,130 --> 00:16:35,340
‫Quoi qu'il en soit, mais cela a très bien fonctionné.

285
00:16:35,340 --> 00:16:37,890
‫C'est donc en fait la première partie

286
00:16:37,890 --> 00:16:41,561
‫de la création de cette fonctionnalité de réinitialisation de mot de passe.

287
00:16:41,561 --> 00:16:43,140
‫Dans la vidéo suivante, nous

288
00:16:43,140 --> 00:16:46,840
‫enverrons ensuite ce jeton ici par e-mail à l'utilisateur et avons

289
00:16:46,840 --> 00:16:49,500
‫donc en fait préparé une vidéo distincte

290
00:16:49,500 --> 00:16:52,370
‫uniquement pour apprendre comment envoyer un e-mail avec node

291
00:16:52,370 --> 00:16:53,470
‫à js.

292
00:16:53,470 --> 00:16:55,100
‫C'est très amusant alors

293
00:16:55,100 --> 00:16:58,363
‫n'attendez pas pour vous y installer tout de suite.

