﻿1
00:00:00,960 --> 00:00:02,570
‫Instructeur : Nous devons donc

2
00:00:02,570 --> 00:00:06,600
‫maintenant envoyer le jeton de réinitialisation du mot de passe par e-mail à l'utilisateur.

3
00:00:06,600 --> 00:00:08,860
‫Et donc dans cette conférence, nous allons

4
00:00:08,860 --> 00:00:12,140
‫apprendre à envoyer des e-mails en utilisant une solution très

5
00:00:12,140 --> 00:00:13,630
‫populaire appelée Nodemailer.

6
00:00:15,154 --> 00:00:17,600
‫Mais avant de faire cela, je voulais

7
00:00:17,600 --> 00:00:20,840
‫en fait vous montrer l'effet de ne pas avoir cette option

8
00:00:20,840 --> 00:00:23,540
‫ici, car je ne vous l'ai jamais montré auparavant.

9
00:00:23,540 --> 00:00:26,543
‫Alors coupons-le ici, essayez-le maintenant, encore une fois, et maintenant

10
00:00:28,910 --> 00:00:31,720
‫vous voyez toutes ces erreurs arriver comme s'il vous

11
00:00:31,720 --> 00:00:33,890
‫plaît confirmer votre mot de passe.

12
00:00:33,890 --> 00:00:36,010
‫Et, en fait, il devrait y en

13
00:00:36,010 --> 00:00:39,340
‫avoir plus, mais bon, c'est maintenant le premier que vous obtenez.

14
00:00:39,340 --> 00:00:41,400
‫Fondamentalement, parce que nous n'avons aucune valeur

15
00:00:41,400 --> 00:00:43,650
‫dans le champ de confirmation du mot de passe.

16
00:00:43,650 --> 00:00:44,483
‫D'accord?

17
00:00:44,483 --> 00:00:46,600
‫Et encore une fois, c'est à cause de

18
00:00:46,600 --> 00:00:49,330
‫la validation et donc encore une fois, nous pouvons, bien sûr,

19
00:00:49,330 --> 00:00:51,083
‫la désactiver facilement avec cette option.

20
00:00:53,430 --> 00:00:56,600
‫Mais de toute façon, créons maintenant une fonction de gestionnaire de

21
00:00:56,600 --> 00:00:59,580
‫courrier électronique que nous pouvons ensuite utiliser dans notre application.

22
00:00:59,580 --> 00:01:00,860
‫Je vais donc le

23
00:01:00,860 --> 00:01:02,673
‫faire ici dans le dossier Utilitaires,

24
00:01:04,210 --> 00:01:08,440
‫encore une fois, et l'appeler simplement par e-mail. js.

25
00:01:08,440 --> 00:01:09,650
‫D'accord?

26
00:01:09,650 --> 00:01:11,410
‫Et avant de faire quoi

27
00:01:11,410 --> 00:01:14,240
‫que ce soit d'autre, installons en fait le package Nodemailer.

28
00:01:14,240 --> 00:01:16,120
‫C'est donc le package que j'ai mentionné dès le

29
00:01:16,120 --> 00:01:17,390
‫début, que nous allons utiliser

30
00:01:17,390 --> 00:01:20,723
‫pour envoyer des e-mails à l'aide de Node. js.

31
00:01:23,130 --> 00:01:27,620
‫Donc, comme toujours, npm installe nodemailer.

32
00:01:34,170 --> 00:01:35,123
‫Et ici.

33
00:01:42,674 --> 00:01:46,423
‫Très bien, et maintenant créons cette fonction ici.

34
00:01:49,500 --> 00:01:51,113
‫Donc des e-mails

35
00:01:52,880 --> 00:01:54,350
‫constants, d'accord,

36
00:01:54,350 --> 00:01:58,060
‫et ici, nous allons essentiellement passer quelques options.

37
00:01:58,060 --> 00:02:01,090
‫Donc, l'adresse e-mail à laquelle nous voulons envoyer un

38
00:02:01,090 --> 00:02:03,780
‫e-mail, la ligne d'objet, le contenu de

39
00:02:03,780 --> 00:02:05,803
‫l'e-mail et peut-être d'autres éléments.

40
00:02:07,625 --> 00:02:08,780
‫D'accord.

41
00:02:08,780 --> 00:02:11,180
‫Et maintenant, nous devons suivre trois

42
00:02:11,180 --> 00:02:13,950
‫étapes pour envoyer des e-mails avec Nodemailer.

43
00:02:15,120 --> 00:02:18,783
‫Donc tout d'abord, nous devons créer un transporteur.

44
00:02:23,950 --> 00:02:24,963
‫Deuxièmement,

45
00:02:27,340 --> 00:02:31,777
‫nous devons définir les options de courrier électronique, en

46
00:02:35,330 --> 00:02:36,373
‫gros, puis à

47
00:02:37,930 --> 00:02:41,820
‫la fin, envoyer le courrier électronique avec Nodemailer.

48
00:02:41,820 --> 00:02:42,960
‫D'accord?

49
00:02:42,960 --> 00:02:46,260
‫Ainsi, le transporteur que nous avons créé dans la première

50
00:02:46,260 --> 00:02:50,790
‫étape ici est essentiellement un service qui enverra réellement l'e-mail, car ce n'est

51
00:02:50,790 --> 00:02:53,610
‫pas un nœud. js qui

52
00:02:53,610 --> 00:02:55,220
‫enverra réellement l'e-mail lui-même.

53
00:02:55,220 --> 00:02:57,720
‫C'est juste un service que nous définissons ici.

54
00:02:57,720 --> 00:03:00,340
‫Quelque chose comme Gmail, par exemple.

55
00:03:00,340 --> 00:03:02,270
‫Maintenant, Gmail n'est pas réellement le

56
00:03:02,270 --> 00:03:03,370
‫service que

57
00:03:03,370 --> 00:03:05,760
‫nous allons utiliser, mais permettez-moi de vous montrer

58
00:03:05,760 --> 00:03:08,350
‫rapidement comment cela fonctionne avec Gmail, car je sais

59
00:03:08,350 --> 00:03:10,810
‫que cela intéressera de nombreuses personnes, d'accord ?

60
00:03:10,810 --> 00:03:15,120
‫Donc, de toute façon, nous devons toujours créer un transporteur, et c'est toujours le

61
00:03:15,120 --> 00:03:16,260
‫même, quel que

62
00:03:16,260 --> 00:03:18,210
‫soit le service que nous allons utiliser.

63
00:03:20,070 --> 00:03:22,410
‫Le transporteur sera donc

64
00:03:22,410 --> 00:03:24,577
‫nodemailer. createTransport et puis,

65
00:03:28,660 --> 00:03:31,550
‫bien sûr, nous avons besoin de quelques options là-dedans.

66
00:03:31,550 --> 00:03:32,920
‫D'accord?

67
00:03:32,920 --> 00:03:35,820
‫Nous pouvons donc spécifier le service et nous

68
00:03:37,620 --> 00:03:40,360
‫pouvons dire que nous voulons utiliser Gmail.

69
00:03:40,360 --> 00:03:42,110
‫Alors, juste comme ça.

70
00:03:42,110 --> 00:03:44,530
‫Et il existe quelques services

71
00:03:44,530 --> 00:03:47,260
‫bien connus que Nodemailer sait gérer, et nous

72
00:03:47,260 --> 00:03:49,870
‫n'avons donc pas à les configurer manuellement.

73
00:03:49,870 --> 00:03:52,660
‫Et donc Gmail n'est que l'un d'entre eux.

74
00:03:52,660 --> 00:03:56,863
‫Mais il y a aussi Yahoo, ou Hotmail, ou bien d'autres, d'accord ?

75
00:03:57,760 --> 00:03:58,980
‫C'est donc

76
00:03:58,980 --> 00:04:03,020
‫le service, et nous devons également spécifier la propriété auth,

77
00:04:03,020 --> 00:04:04,783
‫donc essentiellement pour l'authentification.

78
00:04:06,150 --> 00:04:08,730
‫Nous avons donc besoin d'un utilisateur et d'un mot de passe.

79
00:04:08,730 --> 00:04:10,380
‫Et donc comme avant, nous

80
00:04:10,380 --> 00:04:14,253
‫enregistrons ce genre de choses dans notre config. n fichier.

81
00:04:15,840 --> 00:04:16,673
‫D'accord.

82
00:04:17,930 --> 00:04:18,963
‫Donc, l'e-mail,

83
00:04:21,090 --> 00:04:22,253
‫c'est un nom

84
00:04:23,500 --> 00:04:26,700
‫d'utilisateur, et maintenant je ne vais pas utiliser une

85
00:04:26,700 --> 00:04:28,963
‫vraie adresse Gmail ici parce que, encore

86
00:04:29,910 --> 00:04:34,140
‫une fois, nous n'utilisons pas Gmail, mais juste à titre d'exemple ici, d'accord.

87
00:04:34,140 --> 00:04:36,910
‫Votre mot de passe.

88
00:04:36,910 --> 00:04:38,350
‫D'accord.

89
00:04:38,350 --> 00:04:40,480
‫Donc, nous avons terminé, disons, traitez

90
00:04:40,480 --> 00:04:41,350
‫le point

91
00:04:43,090 --> 00:04:44,830
‫de fin de point EMAIL_USERNAME

92
00:04:47,414 --> 00:04:48,581
‫le processus de

93
00:04:53,780 --> 00:04:56,113
‫mot de passe point de fin de

94
00:04:58,310 --> 00:04:59,800
‫point EMAIL_PASSWORD et j'espère

95
00:05:02,650 --> 00:05:04,723
‫que je les ai correctement orthographiés.

96
00:05:05,580 --> 00:05:06,413
‫D'accord?

97
00:05:06,413 --> 00:05:07,970
‫Et c'est donc

98
00:05:07,970 --> 00:05:10,610
‫la configuration pour le transport dans Nodemailer.

99
00:05:10,610 --> 00:05:12,400
‫Ensuite, dans votre compte Gmail,

100
00:05:12,400 --> 00:05:14,160
‫vous devrez en

101
00:05:14,160 --> 00:05:17,346
‫fait activer quelque chose appelé l'option d'application moins sécurisée.

102
00:05:17,346 --> 00:05:18,896
‫Alors laissez-moi l'écrire ici.

103
00:05:27,609 --> 00:05:29,640
‫Et encore une fois, je ne vais pas

104
00:05:29,640 --> 00:05:31,020
‫le faire ici, mais

105
00:05:31,020 --> 00:05:33,160
‫je sais que beaucoup de gens voudront réellement l'utiliser.

106
00:05:33,160 --> 00:05:35,710
‫Et la raison pour laquelle nous n'utilisons pas Gmail

107
00:05:35,710 --> 00:05:37,200
‫dans cette application est que

108
00:05:37,200 --> 00:05:40,170
‫Gmail n'est pas du tout une bonne idée pour une

109
00:05:40,170 --> 00:05:41,510
‫application de production.

110
00:05:41,510 --> 00:05:44,170
‫Et c'est donc essentiellement ce que nous essayons de construire ici.

111
00:05:44,170 --> 00:05:45,003
‫D'accord?

112
00:05:45,003 --> 00:05:47,600
‫Donc, en utilisant Gmail pour ce genre

113
00:05:47,600 --> 00:05:50,670
‫de choses, vous ne pouvez envoyer que 500 e-mails par

114
00:05:50,670 --> 00:05:53,520
‫jour, et aussi, vous serez probablement très rapidement marqué

115
00:05:53,520 --> 00:05:57,410
‫comme spammeur, et à partir de là, cela ne fera que dégringoler.

116
00:05:57,410 --> 00:05:58,330
‫D'accord?

117
00:05:58,330 --> 00:06:00,710
‫Donc, à moins que ce ne soit comme une

118
00:06:00,710 --> 00:06:02,780
‫application privée, et que vous vous envoyiez simplement

119
00:06:02,780 --> 00:06:04,470
‫des e-mails à vous-même ou à

120
00:06:04,470 --> 00:06:07,090
‫10 amis, eh bien, vous devriez utiliser un autre service.

121
00:06:07,090 --> 00:06:10,680
‫Et certains bien connus sont SendGrid et Mailgun.

122
00:06:10,680 --> 00:06:13,740
‫Et, en fait, nous utiliserons SendGrid un peu plus

123
00:06:13,740 --> 00:06:15,180
‫tard dans ce cours.

124
00:06:15,180 --> 00:06:17,400
‫Maintenant, ce que nous allons faire

125
00:06:17,400 --> 00:06:19,920
‫maintenant, c'est utiliser un service de développement

126
00:06:19,920 --> 00:06:23,740
‫spécial, qui fait semblant d'envoyer des e-mails à de vraies adresses.

127
00:06:23,740 --> 00:06:26,660
‫Mais, en réalité, ces e-mails se retrouvent piégés dans une boîte

128
00:06:26,660 --> 00:06:29,920
‫de réception de développement, de sorte que nous pouvons ensuite voir à

129
00:06:29,920 --> 00:06:32,320
‫quoi ils ressembleront plus tard dans la production.

130
00:06:32,320 --> 00:06:33,270
‫D'accord?

131
00:06:33,270 --> 00:06:35,700
‫Ce service s'appelle donc Mailtrap, alors

132
00:06:35,700 --> 00:06:37,893
‫inscrivons-nous maintenant pour cela.

133
00:06:41,190 --> 00:06:42,023
‫Donc.

134
00:06:43,500 --> 00:06:45,883
‫Piège à courrier. io, d'accord

135
00:06:47,810 --> 00:06:48,643
‫?

136
00:06:48,643 --> 00:06:51,050
‫Donc, et comme je l'ai dit, des tests de messagerie sécurisés

137
00:06:51,050 --> 00:06:52,940
‫pour la mise en scène et le développement.

138
00:06:52,940 --> 00:06:54,280
‫Donc, fondamentalement, avec

139
00:06:54,280 --> 00:06:57,410
‫ce service, vous pouvez faire semblant d'envoyer des e-mails aux

140
00:06:57,410 --> 00:07:00,230
‫clients, mais ces e-mails n'atteindront alors jamais ces

141
00:07:00,230 --> 00:07:03,670
‫clients et seront plutôt piégés dans votre Mailtrap, d'accord ?

142
00:07:03,670 --> 00:07:05,660
‫Et de cette façon,

143
00:07:05,660 --> 00:07:09,150
‫vous ne pouvez pas envoyer accidentellement des e-mails de développement

144
00:07:09,150 --> 00:07:11,540
‫à tous vos clients ou utilisateurs, d'accord.

145
00:07:11,540 --> 00:07:13,450
‫Alors allez-y et inscrivez-vous maintenant.

146
00:07:13,450 --> 00:07:15,430
‫J'ai, bien sûr, déjà mon compte, et je

147
00:07:15,430 --> 00:07:17,040
‫vais donc simplement me connecter maintenant.

148
00:07:17,040 --> 00:07:19,390
‫Alors rendez-vous dans une seconde, après

149
00:07:19,390 --> 00:07:21,600
‫avoir créé votre compte gratuit.

150
00:07:21,600 --> 00:07:24,350
‫Très bien, donc après avoir créé votre

151
00:07:24,350 --> 00:07:27,290
‫compte, il ressemblera probablement un peu à ceci.

152
00:07:27,290 --> 00:07:29,630
‫Maintenant, vous n'aurez pas de boîte de réception pour

153
00:07:29,630 --> 00:07:31,810
‫le moment, alors créons-en une nouvelle, avec le

154
00:07:31,810 --> 00:07:32,970
‫nom de natours.

155
00:07:32,970 --> 00:07:36,200
‫Donc, j'en ai déjà un, mais créez-en un nouveau ici, avec le

156
00:07:36,200 --> 00:07:39,260
‫nom natours, puis appuyez sur Créer une boîte de réception.

157
00:07:39,260 --> 00:07:40,093
‫D'accord?

158
00:07:40,093 --> 00:07:41,520
‫Ensuite, nous pouvons l'ouvrir,

159
00:07:41,520 --> 00:07:44,280
‫et vous voyez que nous n'avons pas d'e-mail à ce

160
00:07:44,280 --> 00:07:45,950
‫stade, mais ce qui compte pour

161
00:07:45,950 --> 00:07:48,170
‫le moment, ce sont ces informations d'identification ici.

162
00:07:48,170 --> 00:07:50,310
‫Vous voyez donc que nous avons notre hôte ici,

163
00:07:50,310 --> 00:07:53,120
‫nous avons le port, le nom d'utilisateur et le mot de passe.

164
00:07:53,120 --> 00:07:54,990
‫Et c'est donc ce que

165
00:07:54,990 --> 00:07:57,580
‫nous allons spécifier dans notre transport dans Nodemailer maintenant.

166
00:07:57,580 --> 00:07:58,413
‫D'accord?

167
00:07:58,413 --> 00:08:00,810
‫Commençons donc par l'hôte, eh bien, en

168
00:08:00,810 --> 00:08:02,060
‫fait, avec le

169
00:08:02,060 --> 00:08:04,320
‫nom d'utilisateur, donc ces deux-là, j'ai

170
00:08:04,320 --> 00:08:07,933
‫juste besoin de copier, alors copions-le dans notre fichier de

171
00:08:09,100 --> 00:08:11,323
‫configuration, c'est donc le nom d'utilisateur,

172
00:08:13,220 --> 00:08:14,723
‫puis c'est le mot

173
00:08:18,620 --> 00:08:21,813
‫de passe, et maintenant nous devons également spécifier l'hôte.

174
00:08:28,580 --> 00:08:31,830
‫D'accord, et c'est parce que Mailtrap n'est

175
00:08:31,830 --> 00:08:35,493
‫pas l'un de ces services prédéfinis fournis avec Nodemailer.

176
00:08:39,720 --> 00:08:40,553
‫D'accord.

177
00:08:44,800 --> 00:08:46,433
‫Le port est 25.

178
00:08:47,780 --> 00:08:49,660
‫Alors, sauvez-le, puis ici,

179
00:08:49,660 --> 00:08:53,390
‫débarrassons-nous de cela, et ce que je dois

180
00:08:53,390 --> 00:08:56,690
‫spécifier à la place, c'est l'hôte, donc

181
00:08:57,730 --> 00:08:58,803
‫l'e-mail,

182
00:09:00,040 --> 00:09:01,460
‫l'hôte et,

183
00:09:01,460 --> 00:09:03,430
‫bien sûr, le port.

184
00:09:03,430 --> 00:09:05,773
‫Donc tout ce que nous venons de sauver avant.

185
00:09:10,800 --> 00:09:12,950
‫Très bien, alors l'authentification ici est

186
00:09:12,950 --> 00:09:14,323
‫exactement la même.

187
00:09:15,790 --> 00:09:17,643
‫Débarrassons-nous également de cela

188
00:09:19,888 --> 00:09:22,200
‫et passons à l'étape numéro deux.

189
00:09:22,200 --> 00:09:24,913
‫Donc, en gros, définir quelques options pour notre e-mail.

190
00:09:29,440 --> 00:09:31,700
‫Très bien, et nous pourrions, bien sûr,

191
00:09:31,700 --> 00:09:34,320
‫faire les étapes deux et trois en même temps,

192
00:09:34,320 --> 00:09:36,970
‫mais j'aime simplement préférer ces options ici en premier.

193
00:09:37,810 --> 00:09:39,910
‫D'accord, et donc ici, nous

194
00:09:39,910 --> 00:09:41,603
‫spécifions d'où vient l'e-mail,

195
00:09:42,660 --> 00:09:43,713
‫donc

196
00:09:45,890 --> 00:09:48,963
‫le nom, puis l'adresse e-mail comme celle-ci.

197
00:09:52,800 --> 00:09:55,453
‫Ensuite, nous avons besoin de l'adresse du

198
00:09:57,500 --> 00:10:01,153
‫destinataire, et donc celle-là, je vais la spécifier en option,

199
00:10:03,200 --> 00:10:04,033
‫d'accord ?

200
00:10:04,033 --> 00:10:06,560
‫Donc, fondamentalement, venant comme argument de cette fonction.

201
00:10:06,560 --> 00:10:08,650
‫Donc cet objet options ici,

202
00:10:08,650 --> 00:10:11,173
‫c'est celui-ci que nous passons dans la fonction.

203
00:10:12,110 --> 00:10:13,370
‫D'accord.

204
00:10:13,370 --> 00:10:17,263
‫Alors en fait la même chose pour le sujet et pour le texte.

205
00:10:18,990 --> 00:10:20,593
‫Dupliquons-les simplement ici,

206
00:10:26,250 --> 00:10:28,170
‫donc le sujet, puis nous

207
00:10:29,300 --> 00:10:31,720
‫spécifions simplement la propriété text, et

208
00:10:31,720 --> 00:10:34,793
‫celle-là, dans les options, je l'appelle simplement message.

209
00:10:35,790 --> 00:10:38,070
‫Très bien, donc celui-ci est essentiellement la

210
00:10:38,070 --> 00:10:39,950
‫version texte de l'e-mail.

211
00:10:39,950 --> 00:10:44,220
‫Mais on peut alors aussi spécifier la propriété HTML.

212
00:10:44,220 --> 00:10:48,220
‫D'accord, et nous pouvons maintenant convertir ce message en HTML.

213
00:10:48,220 --> 00:10:50,460
‫Et plus tard, nous allons le faire,

214
00:10:50,460 --> 00:10:54,780
‫mais pour l'instant, restons simple et ne spécifions pas du tout le code HTML ici.

215
00:10:54,780 --> 00:10:55,613
‫D'accord?

216
00:10:55,613 --> 00:10:57,993
‫Donc, laissez-le simplement au texte.

217
00:10:59,320 --> 00:11:00,153
‫D'accord!

218
00:11:00,153 --> 00:11:01,773
‫Et puis enfin,

219
00:11:03,050 --> 00:11:06,723
‫à la fin, transporter, c'est donc l'objet transporteur que

220
00:11:06,723 --> 00:11:09,440
‫nous avons créé ici au début, et

221
00:11:09,440 --> 00:11:11,890
‫là-dessus, nous pouvons ensuite appeler sendMail

222
00:11:14,470 --> 00:11:18,983
‫et nous devons y transmettre nos options de messagerie, d'accord ?

223
00:11:19,900 --> 00:11:22,640
‫Et maintenant, cela renvoie en fait une promesse.

224
00:11:22,640 --> 00:11:25,890
‫Bon, encore une fois, il s'agit d'une fonction

225
00:11:25,890 --> 00:11:29,480
‫asynchrone, et puisque nous ne voulons pas travailler directement avec

226
00:11:29,480 --> 00:11:30,933
‫Promises, utilisons async/await.

227
00:11:32,890 --> 00:11:33,723
‫D'accord.

228
00:11:34,770 --> 00:11:37,450
‫Donc, déclarer cela comme une fonction asynchrone

229
00:11:37,450 --> 00:11:39,023
‫et c'est parti.

230
00:11:40,030 --> 00:11:41,070
‫D'accord.

231
00:11:41,070 --> 00:11:43,250
‫Nous ne voulons pas stocker de résultat

232
00:11:43,250 --> 00:11:46,423
‫ici, ce que nous pourrions, mais cela ne m'intéresse pas vraiment.

233
00:11:47,940 --> 00:11:51,930
‫D'accord, et maintenant exportons-le simplement par défaut à

234
00:11:51,930 --> 00:11:54,263
‫partir de ce module.

235
00:11:57,990 --> 00:11:59,360
‫D'accord, ça a l'air bon !

236
00:11:59,360 --> 00:12:02,890
‫Maintenant, allons de l'avant et essayons réellement ceci.

237
00:12:02,890 --> 00:12:07,050
‫Et donc pour commencer, nous devons l'importer ici, bien sûr.

238
00:12:07,050 --> 00:12:09,003
‫Alors dupliquons simplement ceci

239
00:12:13,270 --> 00:12:14,370
‫ici, il

240
00:12:14,370 --> 00:12:19,163
‫s'agit donc d'un e-mail, et la fonction s'appelle sendEmail, je pense.

241
00:12:21,573 --> 00:12:22,406
‫D'accord.

242
00:12:22,406 --> 00:12:26,513
‫Revenons donc à notre fonction middleware ici, et commençons

243
00:12:28,540 --> 00:12:31,397
‫par définir l'URL de réinitialisation.

244
00:12:33,890 --> 00:12:37,810
‫Ainsi, idéalement, l'utilisateur cliquera alors sur cet email et pourra

245
00:12:37,810 --> 00:12:41,240
‫alors faire la demande à partir de là.

246
00:12:41,240 --> 00:12:42,500
‫Et cela fonctionnera

247
00:12:42,500 --> 00:12:44,650
‫plus tard lorsque nous implémenterons notre site

248
00:12:44,650 --> 00:12:48,170
‫Web dynamique, mais nous souhaitons néanmoins maintenant créer cette URL ici, afin

249
00:12:48,170 --> 00:12:50,350
‫que l'utilisateur puisse simplement la copier, afin

250
00:12:50,350 --> 00:12:52,433
‫de faciliter la réalisation de cette demande.

251
00:12:53,720 --> 00:12:56,130
‫D'accord, donc en gros, nous

252
00:12:57,350 --> 00:13:00,750
‫devons recréer cette structure d'URL que nous avons ici.

253
00:13:00,750 --> 00:13:02,627
‫Donc, celui-ci est pour le mot de

254
00:13:02,627 --> 00:13:04,227
‫passe oublié et enregistrons-le ici.

255
00:13:10,670 --> 00:13:14,910
‫Donc, mot de passe oublié, et maintenant l'URL que nous créons est

256
00:13:14,910 --> 00:13:17,820
‫en fait pour réinitialiser le mot de passe.

257
00:13:17,820 --> 00:13:21,340
‫Alors, rappelez-vous, nous avons déjà mis en œuvre celui-ci auparavant.

258
00:13:21,340 --> 00:13:22,173
‫D'accord.

259
00:13:22,173 --> 00:13:24,020
‫Allons de l'avant et

260
00:13:27,760 --> 00:13:31,750
‫copiez-le ici, alors réinitialisez le mot de passe, d'accord ?

261
00:13:31,750 --> 00:13:33,940
‫Et cela prendra alors le

262
00:13:33,940 --> 00:13:35,540
‫jeton comme paramètre.

263
00:13:35,540 --> 00:13:39,120
‫D'accord, mettons donc n'importe quel jeton aléatoire ici pour le moment.

264
00:13:39,120 --> 00:13:40,563
‫Donc ça n'a pas d'importance du tout.

265
00:13:41,610 --> 00:13:42,860
‫Permettez-moi de

266
00:13:45,150 --> 00:13:50,150
‫l'enregistrer ici, en tant que mot de passe de réinitialisation.

267
00:13:50,360 --> 00:13:51,193
‫D'accord.

268
00:13:51,193 --> 00:13:53,970
‫Et aussi, ce n'est pas GET, ce n'est pas

269
00:13:53,970 --> 00:13:56,320
‫non plus POST, mais c'est PATCH, car

270
00:13:56,320 --> 00:13:59,490
‫le résultat de cela sera la modification de la propriété

271
00:13:59,490 --> 00:14:01,560
‫password dans le document utilisateur.

272
00:14:01,560 --> 00:14:05,470
‫Et donc PATCH est le meilleur en fait, d'accord ?

273
00:14:05,470 --> 00:14:09,023
‫Modifions donc rapidement notre implémentation de route pour cela.

274
00:14:10,720 --> 00:14:14,410
‫Donc, c'est ici dans userRoute, donc ce n'est

275
00:14:14,410 --> 00:14:17,480
‫pas POST, c'est PATCH, et

276
00:14:17,480 --> 00:14:20,710
‫nous voulons également spécifier un paramètre.

277
00:14:20,710 --> 00:14:22,330
‫Alors, rappelez-vous comment nous faisons cela.

278
00:14:22,330 --> 00:14:24,030
‫Alors c'est comme ici.

279
00:14:24,030 --> 00:14:26,960
‫Donc, une autre barre oblique puis deux points, puis

280
00:14:26,960 --> 00:14:29,593
‫le nom du paramètre, qui sera un jeton.

281
00:14:31,390 --> 00:14:32,990
‫D'accord, et construisons cela

282
00:14:32,990 --> 00:14:34,870
‫maintenant, en commençant par le protocole.

283
00:14:34,870 --> 00:14:38,340
‫Alors, HTTP ou HTTPS, d'accord ?

284
00:14:38,340 --> 00:14:42,283
‫Et nous allons essentiellement obtenir ces données à partir de notre demande.

285
00:14:43,180 --> 00:14:45,720
‫Donc, c'est stocké sur le protocole

286
00:14:47,250 --> 00:14:51,750
‫de point de demande, puis deux-points, barre oblique, puis l'hôte, d'accord ?

287
00:14:51,750 --> 00:14:54,590
‫Donc, nous préparons essentiellement celui-ci ici pour travailler à

288
00:14:54,590 --> 00:14:57,260
‫la fois en développement et en production.

289
00:14:57,260 --> 00:15:00,630
‫Alors, demandez dot get, puis

290
00:15:00,630 --> 00:15:01,513
‫hébergez.

291
00:15:02,760 --> 00:15:04,950
‫D'accord, c'est ainsi que nous obtenons l'hôte,

292
00:15:04,950 --> 00:15:09,100
‫puis slash api slash version un, et je suppose que ce n'est pas idéal

293
00:15:09,100 --> 00:15:11,860
‫de définir un niveau codé en dur comme celui-ci,

294
00:15:11,860 --> 00:15:13,170
‫mais encore une

295
00:15:13,170 --> 00:15:15,260
‫fois, c'est quelque chose que nous allons

296
00:15:15,260 --> 00:15:17,080
‫corriger un peu plus tard, d'accord?

297
00:15:17,080 --> 00:15:20,100
‫Et je vois que ce n'est en fait pas correct.

298
00:15:20,100 --> 00:15:22,680
‫Ces accolades devraient être là.

299
00:15:22,680 --> 00:15:24,263
‫Alors, maintenant, utilisateurs,

300
00:15:25,676 --> 00:15:26,843
‫resetPassword, puis

301
00:15:28,910 --> 00:15:32,830
‫encore une autre barre oblique, et enfin le jeton.

302
00:15:32,830 --> 00:15:34,833
‫Bon, alors, resetToken.

303
00:15:35,790 --> 00:15:36,623
‫D'accord?

304
00:15:36,623 --> 00:15:38,780
‫Et comme nous en avons discuté précédemment, dans

305
00:15:38,780 --> 00:15:40,000
‫la dernière conférence,

306
00:15:40,000 --> 00:15:44,000
‫ici, nous devons en fait envoyer le resetToken d'origine simple, et non le jeton crypté.

307
00:15:44,000 --> 00:15:44,833
‫D'accord?

308
00:15:44,833 --> 00:15:46,170
‫Nous comparerons ensuite,

309
00:15:46,170 --> 00:15:49,810
‫à l'étape suivante, le jeton d'origine avec celui crypté.

310
00:15:49,810 --> 00:15:52,780
‫Donc, encore une fois, comme nous en avons discuté dans la dernière vidéo.

311
00:15:52,780 --> 00:15:56,657
‫Sauvegardez-le ici maintenant, et c'est donc notre URL de réinitialisation.

312
00:16:00,940 --> 00:16:04,490
‫Et maintenant, sur la base de cette URL, créons rapidement

313
00:16:04,490 --> 00:16:06,233
‫le message ici également.

314
00:16:07,950 --> 00:16:11,113
‫Alors, vous avez oublié votre mot de passe ?

315
00:16:13,120 --> 00:16:17,720
‫Soumettez une demande de PATCH avec votre nouveau mot de passe

316
00:16:18,900 --> 00:16:21,650
‫et mot de passeConfirmez bien sûr,

317
00:16:24,380 --> 00:16:26,273
‫à l'URL de

318
00:16:30,850 --> 00:16:34,270
‫réinitialisation que nous venons de créer, d'accord ?

319
00:16:34,270 --> 00:16:37,500
‫Donc, fondamentalement, en donnant à l'utilisateur quelques instructions ici.

320
00:16:37,500 --> 00:16:39,373
‫Ensuite, sur une nouvelle ligne, nous

321
00:16:40,670 --> 00:16:44,053
‫disons également, si vous n'avez pas oublié votre mot de passe,

322
00:16:47,820 --> 00:16:49,610
‫veuillez ignorer cet e-mail.

323
00:16:49,610 --> 00:16:51,690
‫C'est donc un message courant, et encore

324
00:16:51,690 --> 00:16:54,320
‫une fois, je suis sûr que vous l'avez vu d'une

325
00:16:54,320 --> 00:16:55,963
‫manière ou d'une autre, d'accord.

326
00:16:56,860 --> 00:16:59,900
‫Alors maintenant, enfin, envoyons l'e-mail, et

327
00:16:59,900 --> 00:17:02,020
‫rappelons-nous que sendEmail est

328
00:17:02,020 --> 00:17:03,640
‫une fonction asynchrone.

329
00:17:03,640 --> 00:17:06,470
‫Et donc, par conséquent, nous devons l'attendre ici.

330
00:17:06,470 --> 00:17:07,303
‫D'accord?

331
00:17:07,303 --> 00:17:09,693
‫Parce que, bien sûr, ça va retourner une promesse.

332
00:17:11,470 --> 00:17:14,850
‫Et rappelez-vous maintenant que la fonction sendEmail prend

333
00:17:14,850 --> 00:17:17,490
‫ici un objet avec quelques options.

334
00:17:17,490 --> 00:17:22,490
‫L'e-mail est donc utilisateur. e-mail, non?

335
00:17:23,730 --> 00:17:28,150
‫Ou nous pourrions aussi dire, req. corps. e-mail.

336
00:17:28,150 --> 00:17:31,233
‫C'est donc exactement la même chose, en fait, non ?

337
00:17:32,900 --> 00:17:35,773
‫Ensuite, le sujet que nous voulons

338
00:17:36,690 --> 00:17:41,363
‫dire est, votre jeton de réinitialisation de mot de passe.

339
00:17:44,850 --> 00:17:48,540
‫Disons tout de suite qu'elle n'est valable que

340
00:17:48,540 --> 00:17:52,290
‫10 minutes, pour que l'utilisateur sache qu'il doit se dépêcher.

341
00:17:52,290 --> 00:17:55,113
‫D'accord, et enfin, le message aussi.

342
00:17:56,940 --> 00:17:57,773
‫D'accord.

343
00:17:57,773 --> 00:18:00,080
‫Donc, nous attendons cela,

344
00:18:00,080 --> 00:18:04,330
‫et après cela, envoyons également, bien sûr, une réponse.

345
00:18:04,330 --> 00:18:07,130
‫D'accord, il doit toujours y avoir une réponse,

346
00:18:07,130 --> 00:18:08,860
‫sinon, comme vous le

347
00:18:08,860 --> 00:18:11,970
‫savez déjà, le cycle demande/réponse ne se terminera jamais.

348
00:18:11,970 --> 00:18:14,700
‫Nous envoyons donc simplement un

349
00:18:14,700 --> 00:18:18,720
‫code 200, puis un message bien formaté

350
00:18:19,670 --> 00:18:22,023
‫avec un statut

351
00:18:25,640 --> 00:18:28,550
‫de réussite, puis juste un

352
00:18:28,550 --> 00:18:32,410
‫message rapide disant, Token envoyé à l'e-mail.

353
00:18:32,410 --> 00:18:33,243
‫D'accord.

354
00:18:33,243 --> 00:18:37,490
‫Et, bien sûr, nous ne pouvons pas envoyer le jeton de réinitialisation ici, par

355
00:18:37,490 --> 00:18:40,970
‫adjacent, à droite, car tout le monde pourrait alors réinitialiser le mot

356
00:18:40,970 --> 00:18:42,910
‫de passe de n'importe qui et

357
00:18:42,910 --> 00:18:45,440
‫prendre en charge le compte de son choix.

358
00:18:45,440 --> 00:18:47,740
‫Et c'est donc toute la raison pour laquelle

359
00:18:47,740 --> 00:18:49,940
‫nous l'envoyons à une adresse e-mail, car

360
00:18:49,940 --> 00:18:51,800
‫nous supposons que l'e-mail est

361
00:18:51,800 --> 00:18:54,187
‫un endroit sûr, auquel seul l'utilisateur a accès.

362
00:18:54,187 --> 00:18:55,020
‫D'accord.

363
00:18:56,990 --> 00:19:00,170
‫Whoo, donc, cette vidéo, encore une fois, est assez longue, mais

364
00:19:00,170 --> 00:19:01,620
‫nous n'avons toujours pas terminé.

365
00:19:01,620 --> 00:19:04,200
‫Nous avons presque terminé, mais pas tout à

366
00:19:04,200 --> 00:19:06,590
‫fait, car il pourrait se produire

367
00:19:06,590 --> 00:19:10,560
‫une erreur, en utilisant ce sendEmail, d'accord, et donc dans ce cas,

368
00:19:10,560 --> 00:19:14,100
‫nous voulons bien sûr envoyer un message d'erreur au client.

369
00:19:14,100 --> 00:19:16,720
‫Mais dans ce cas, nous devons en fait faire

370
00:19:16,720 --> 00:19:18,980
‫plus que simplement envoyer un message d'erreur.

371
00:19:18,980 --> 00:19:22,707
‫En gros, nous devons réinitialiser le jeton de réinitialisation du mot de passe

372
00:19:22,707 --> 00:19:26,660
‫et la réinitialisation du mot de passe a expiré que nous avons définie, d'accord ?

373
00:19:26,660 --> 00:19:29,140
‫Et donc pour le moment, il ne suffit

374
00:19:29,140 --> 00:19:31,340
‫pas de simplement détecter l'erreur et de

375
00:19:31,340 --> 00:19:34,100
‫l'envoyer ensuite à notre middleware global de gestion des erreurs.

376
00:19:34,100 --> 00:19:36,980
‫Mais à la place, nous devons simplement

377
00:19:36,980 --> 00:19:39,660
‫ajouter un bloc try-catch ici.

378
00:19:39,660 --> 00:19:42,290
‫Encore une fois, parce que nous

379
00:19:42,290 --> 00:19:45,363
‫voulons en fait faire plus que simplement envoyer une

380
00:19:46,850 --> 00:19:49,633
‫erreur au client, nous essayons donc essentiellement

381
00:19:50,950 --> 00:19:53,763
‫de le faire, d'accord, mais en cas d'erreur,

382
00:19:54,660 --> 00:19:57,630
‫alors, bien sûr, ce bloc ici est exécuté.

383
00:19:57,630 --> 00:19:58,463
‫D'accord?

384
00:19:58,463 --> 00:20:01,380
‫Donc, ce que nous voulons faire dans ce cas,

385
00:20:01,380 --> 00:20:04,160
‫eh bien, nous voulons essentiellement, comme je

386
00:20:04,160 --> 00:20:08,140
‫l'ai dit, réinitialiser à la fois le jeton et la propriété expires.

387
00:20:08,140 --> 00:20:09,620
‫D'accord.

388
00:20:09,620 --> 00:20:11,850
‫Donc, passwordResetToken, et

389
00:20:15,360 --> 00:20:18,950
‫définissez-le sur non défini, d'accord.

390
00:20:18,950 --> 00:20:22,053
‫Et la même chose pour passwordResetExpires.

391
00:20:24,670 --> 00:20:25,503
‫D'accord.

392
00:20:25,503 --> 00:20:27,350
‫Et puis, bien sûr, comme avant,

393
00:20:27,350 --> 00:20:30,830
‫cela ne fait que modifier les données, mais ne les enregistre pas vraiment.

394
00:20:30,830 --> 00:20:33,693
‫Et alors allons ajouter, récupérons celui-ci,

395
00:20:35,560 --> 00:20:39,730
‫et donc pour sauvegarder les données dans ce cas.

396
00:20:39,730 --> 00:20:41,750
‫D'accord, et puis juste pour

397
00:20:41,750 --> 00:20:45,140
‫finir, nous, bien sûr, retournons ensuite avec une erreur

398
00:20:45,140 --> 00:20:46,620
‫au middleware suivant.

399
00:20:46,620 --> 00:20:48,223
‫Donc newAppError, Il

400
00:20:50,970 --> 00:20:55,373
‫y a eu une erreur lors de l'envoi de l'e-mail.

401
00:20:57,940 --> 00:20:59,333
‫Réessayez plus tard.

402
00:21:00,220 --> 00:21:03,700
‫Et dans ce cas, le code d'erreur peut en fait être un 500.

403
00:21:03,700 --> 00:21:06,980
‫Donc c'est vraiment alors, comme une erreur qui s'est produite sur

404
00:21:06,980 --> 00:21:09,930
‫le serveur, et donc ça doit être un

405
00:21:09,930 --> 00:21:12,893
‫code cinq, et 500 est juste, comme, le code standard.

406
00:21:13,740 --> 00:21:15,160
‫D'accord.

407
00:21:15,160 --> 00:21:20,160
‫Alors, allons-y maintenant et réessayez, très bien.

408
00:21:20,830 --> 00:21:25,130
‫C'est donc encore une fois assez long, mais bon, nous devons

409
00:21:25,130 --> 00:21:27,200
‫le faire, n'est-ce pas ?

410
00:21:27,200 --> 00:21:31,173
‫Alors, mot de passe oublié, avec cet e-mail, vérifions-le.

411
00:21:32,260 --> 00:21:34,270
‫Cela peut donc ne pas prendre

412
00:21:34,270 --> 00:21:36,400
‫beaucoup de temps, à cause de l'envoi

413
00:21:36,400 --> 00:21:40,360
‫de l'e-mail, mais en fait, cela a fonctionné maintenant, cela a pris environ cinq

414
00:21:40,360 --> 00:21:42,840
‫secondes, mais nous voyons Token envoyé à l'e-mail.

415
00:21:42,840 --> 00:21:45,770
‫et donc, comme nous le savons, depuis que nous avons utilisé Mailtrap, il n'a

416
00:21:45,770 --> 00:21:49,810
‫en fait pas envoyé cet e-mail à hello@jones. io mais à

417
00:21:49,810 --> 00:21:53,010
‫la place, l'e-mail devrait maintenant être

418
00:21:53,010 --> 00:21:55,940
‫piégé à l'intérieur de Mailtrap.

419
00:21:55,940 --> 00:21:59,003
‫Et, en effet, ici sur le côté gauche, il est maintenant apparu.

420
00:21:59,890 --> 00:22:01,170
‫D'accord.

421
00:22:01,170 --> 00:22:04,440
‫C'est donc l'e-mail que nous avons spécifié et nous

422
00:22:04,440 --> 00:22:06,467
‫obtenons ici notre belle URL.

423
00:22:07,960 --> 00:22:11,980
‫D'accord, donc celui que nous avons créé avec le protocole,

424
00:22:11,980 --> 00:22:15,070
‫l'hôte, et puis aussi avec le token.

425
00:22:15,070 --> 00:22:17,210
‫Jetons donc un coup d'œil

426
00:22:17,210 --> 00:22:18,910
‫s'il s'agit vraiment

427
00:22:18,910 --> 00:22:20,873
‫de notre jeton simple, se

428
00:22:22,130 --> 00:22:26,690
‫terminant donc par 88df, et, en effet, nous avons ici resetToken, 88df.

429
00:22:26,690 --> 00:22:29,050
‫Et maintenant dans la base de données,

430
00:22:29,050 --> 00:22:31,890
‫nous devrions avoir le jeton se terminant par 1111.

431
00:22:31,890 --> 00:22:34,883
‫Alors, confirmons que, ici dans

432
00:22:35,780 --> 00:22:40,780
‫Compass, rechargez-le et, en effet, c'est parti, d'accord ?

433
00:22:41,470 --> 00:22:45,260
‫Et encore une fois, c'est ici dans 10 minutes.

434
00:22:45,260 --> 00:22:47,910
‫Super, alors nous avons terminé cette partie.

435
00:22:47,910 --> 00:22:50,290
‫Ensuite, dans la vidéo suivante, nous réinitialiserons réellement

436
00:22:50,290 --> 00:22:52,320
‫le mot de passe, en fonction,

437
00:22:52,320 --> 00:22:54,590
‫bien sûr, du nouveau mot de passe

438
00:22:54,590 --> 00:22:58,030
‫que l'utilisateur envoie avec la demande de réinitialisation du mot de passe.

439
00:22:58,030 --> 00:22:58,993
‫Alors, à bientôt.

