﻿1
00:00:01,120 --> 00:00:02,370
‫Instructeur : Dans cette

2
00:00:02,370 --> 00:00:06,430
‫conférence, nous allons donc gérer les mots de passe de nos utilisateurs dans la base de données.

3
00:00:06,430 --> 00:00:08,790
‫Et par là, j'entends d'abord valider si

4
00:00:08,790 --> 00:00:12,660
‫le mot de passe saisi est égal au mot de passe confirmé, puis

5
00:00:12,660 --> 00:00:16,380
‫également crypter le mot de passe dans la base de données afin

6
00:00:16,380 --> 00:00:18,633
‫de le protéger contre les attaques.

7
00:00:20,320 --> 00:00:22,330
‫Et donc la première chose que

8
00:00:22,330 --> 00:00:26,690
‫nous allons faire est de valider si les deux mots de passe saisis sont les mêmes.

9
00:00:26,690 --> 00:00:28,840
‫Et le meilleur endroit pour le faire

10
00:00:28,840 --> 00:00:31,760
‫est ici dans le mot de passe de confirmation, d'accord ?

11
00:00:31,760 --> 00:00:36,283
‫Et donc écrivons notre validateur personnalisé pour ça, d'accord ?

12
00:00:38,480 --> 00:00:41,890
‫Alors rappelez-vous, nous utilisons la propriété validate et ensuite,

13
00:00:41,890 --> 00:00:44,270
‫puisque nous voulons créer une

14
00:00:44,270 --> 00:00:48,420
‫fonction et également un message d'erreur, ouvrons un nouvel objet

15
00:00:49,480 --> 00:00:51,990
‫ici et puis créons un validateur,

16
00:00:51,990 --> 00:00:53,920
‫qui sera la fonction

17
00:00:53,920 --> 00:00:56,370
‫et commençons en fait par celui-ci.

18
00:00:56,370 --> 00:00:58,780
‫Alors, rappelez-vous, tout ce dont nous avons besoin ici

19
00:00:58,780 --> 00:01:01,770
‫est de spécifier une simple fonction de rappel qui sera ensuite appelée

20
00:01:01,770 --> 00:01:03,853
‫lors de la création du nouveau document.

21
00:01:04,940 --> 00:01:06,163
‫Donc, fonction, et

22
00:01:07,210 --> 00:01:10,320
‫là encore, nous ne pouvons pas utiliser de fonction flèche

23
00:01:10,320 --> 00:01:13,183
‫car nous devons en fait utiliser le mot-clé disk.

24
00:01:14,690 --> 00:01:15,523
‫D'accord?

25
00:01:16,560 --> 00:01:19,180
‫Alors, rappelez-vous qu'à partir de la fonction de validation,

26
00:01:19,180 --> 00:01:21,470
‫nous retournons soit vrai soit faux

27
00:01:21,470 --> 00:01:23,960
‫et si la valeur de retour est fausse,

28
00:01:23,960 --> 00:01:27,550
‫cela signifie que nous allons obtenir une erreur de validation, d'accord ?

29
00:01:27,550 --> 00:01:29,630
‫Et, bien sûr, si c'est vrai, alors non.

30
00:01:29,630 --> 00:01:33,820
‫Et donc ce que nous voulons ici, c'est dire que l'élément courant donc, mot

31
00:01:33,820 --> 00:01:37,643
‫de passe confirmé, est égal à ce mot de passe point, donc, mot

32
00:01:37,643 --> 00:01:40,760
‫de passe confirmé, est égal à ce mot de passe

33
00:01:40,760 --> 00:01:42,350
‫point, et c'est tout !

34
00:01:42,350 --> 00:01:46,510
‫Ainsi, par exemple, si la confirmation du mot de passe est A-B-C

35
00:01:46,510 --> 00:01:49,520
‫et que le mot de passe est également

36
00:01:49,520 --> 00:01:52,530
‫A-B-C, cela retournera bien sûr vrai, d'accord ?

37
00:01:52,530 --> 00:01:54,330
‫Et alors la validation est

38
00:01:54,330 --> 00:01:56,550
‫passée et aucune erreur ne se produira.

39
00:01:56,550 --> 00:02:00,440
‫Mais, si le mot de passe initial est, disons, X-Y-Z, alors

40
00:02:00,440 --> 00:02:02,860
‫bien sûr, cela va retourner faux

41
00:02:02,860 --> 00:02:05,820
‫et nous aurons une erreur de validation, d'accord ?

42
00:02:05,820 --> 00:02:08,660
‫Donc, très simple, mais nous devons garder à

43
00:02:08,660 --> 00:02:12,320
‫l'esprit que cela ne fonctionnera que sur la sauvegarde, d'accord ?

44
00:02:12,320 --> 00:02:13,950
‫J'en ai donc déjà parlé

45
00:02:13,950 --> 00:02:17,840
‫lorsque nous avons utilisé le validateur personnalisé sur le modèle de tournée, n'est-ce pas ?

46
00:02:17,840 --> 00:02:19,740
‫Mais je vous le rappelle

47
00:02:19,740 --> 00:02:24,120
‫ici encore parce que c'est absolument crucial ici à ce stade, d'accord ?

48
00:02:24,120 --> 00:02:26,423
‫Alors laissez-moi l'écrire ici pour vous.

49
00:02:27,739 --> 00:02:29,010
‫(clavier

50
00:02:29,010 --> 00:02:30,410
‫en cliquant)

51
00:02:30,410 --> 00:02:32,050
‫Lors de l'enregistrement.

52
00:02:32,050 --> 00:02:32,883
‫D'accord?

53
00:02:32,883 --> 00:02:35,740
‫Et pour cette raison, chaque fois que nous voulons mettre à

54
00:02:35,740 --> 00:02:38,250
‫jour un utilisateur, nous devrons toujours utiliser la sauvegarde et

55
00:02:38,250 --> 00:02:41,010
‫non, par exemple, en trouver un et mettre à jour comme

56
00:02:41,010 --> 00:02:43,310
‫nous l'avons fait avec nos visites, d'accord ?

57
00:02:43,310 --> 00:02:45,570
‫Alors gardons cela à l'esprit lorsque nous

58
00:02:45,570 --> 00:02:48,730
‫écrivons le reste du code dans le reste de la section

59
00:02:48,730 --> 00:02:51,670
‫et en particulier pour la mise à jour, d'accord ?

60
00:02:51,670 --> 00:02:54,400
‫Car disons que nous avons mis à jour le mot de passe de

61
00:02:54,400 --> 00:02:56,320
‫l'utilisateur simplement avec une mise à jour régulière.

62
00:02:56,320 --> 00:02:58,910
‫Alors dans ce cas, ce mot de passe de confirmation

63
00:02:58,910 --> 00:03:01,540
‫de validation que nous avons ici ne fonctionnerait plus, d'accord ?

64
00:03:01,540 --> 00:03:04,670
‫Et bien sûr, cela ne peut pas arriver, d'accord ?

65
00:03:04,670 --> 00:03:08,410
‫Et donc, encore une fois, gardez à l'esprit que cela ne fonctionnera

66
00:03:08,410 --> 00:03:12,920
‫que lorsque nous créerons un nouvel objet, ainsi de suite dot create, ou on save.

67
00:03:12,920 --> 00:03:13,753
‫D'accord?

68
00:03:13,753 --> 00:03:15,524
‫Alors, sur créer et

69
00:03:15,524 --> 00:03:18,550
‫enregistrer, Alors, sur créer et enregistrer, d'accord

70
00:03:18,550 --> 00:03:19,383
‫?

71
00:03:19,383 --> 00:03:22,830
‫Nous créons donc un nouvel objet en utilisant create, n'est-ce pas ?

72
00:03:22,830 --> 00:03:25,431
‫Donc, ici, j'ai utilisé un dot create Donc, ici,

73
00:03:25,431 --> 00:03:27,100
‫j'ai utilisé un dot create,

74
00:03:27,100 --> 00:03:28,463
‫mais rappelez-vous comment je

75
00:03:28,463 --> 00:03:31,143
‫vous ai également montré que nous pouvons utiliser un utilisateur

76
00:03:33,100 --> 00:03:35,160
‫dot save, comme ça, n'est-ce pas ?

77
00:03:35,160 --> 00:03:38,470
‫Et en fait, nous pouvons également utiliser un utilisateur dot

78
00:03:38,470 --> 00:03:41,550
‫save afin de mettre à jour l'utilisateur, d'accord ?

79
00:03:41,550 --> 00:03:43,593
‫Mais encore une fois, plus à ce sujet un peu plus tard.

80
00:03:44,820 --> 00:03:45,810
‫D'accord?

81
00:03:45,810 --> 00:03:50,063
‫Essayons maintenant cette validation ici, d'accord ?

82
00:03:51,230 --> 00:03:53,280
‫Alors tout d'abord, essayons simplement de créer

83
00:03:53,280 --> 00:03:55,210
‫un nouvel utilisateur avec ces données

84
00:03:55,210 --> 00:03:57,660
‫ici, ce qui ne devrait pas fonctionner car nous

85
00:03:57,660 --> 00:04:01,020
‫avons déjà un utilisateur avec cette adresse e-mail et nous avons dit

86
00:04:01,020 --> 00:04:03,290
‫que celui-ci devrait être unique et donc ne

87
00:04:03,290 --> 00:04:04,590
‫devrait pas fonctionner.

88
00:04:06,330 --> 00:04:12,210
‫D'accord, et bien sûr notre erreur de clé en double, n'est-ce pas ?

89
00:04:12,210 --> 00:04:14,170
‫Maintenant, si vous étiez en production,

90
00:04:14,170 --> 00:04:17,040
‫alors bien sûr, nous obtiendrions déjà notre erreur joliment formatée que

91
00:04:17,040 --> 00:04:19,620
‫nous avons créée dans la dernière section, n'est-ce pas ?

92
00:04:19,620 --> 00:04:23,730
‫Mais en ce moment nous sommes en développement et c'est donc l'erreur que nous avons

93
00:04:23,730 --> 00:04:25,383
‫définie que nous voulons voir.

94
00:04:26,510 --> 00:04:27,343
‫D'accord?

95
00:04:28,440 --> 00:04:30,890
‫Utilisons donc simplement un autre e-mail ici

96
00:04:30,890 --> 00:04:33,060
‫et puisque nous travaillons sur l'e-mail

97
00:04:33,060 --> 00:04:36,593
‫ici, voyons également comment fonctionne la validation de l'adresse e-mail.

98
00:04:37,650 --> 00:04:40,833
‫Disons donc que nous l'avons spécifié comme notre e-mail.

99
00:04:42,190 --> 00:04:47,663
‫Et donc, nous voyons l'erreur, "veuillez fournir un e-mail valide. " D'accord?

100
00:04:48,660 --> 00:04:51,320
‫Alors testons-le juste comme ça car je pense que cela ne

101
00:04:51,320 --> 00:04:53,120
‫devrait pas non plus être valide.

102
00:04:53,120 --> 00:04:55,043
‫C'est peut-être le cas, mais voyons voir.

103
00:04:56,170 --> 00:04:57,840
‫Et oui, en fait ce n'est pas

104
00:04:57,840 --> 00:05:01,050
‫parce qu'il n'y a pas de noms de domaine avec une seule lettre, d'accord ?

105
00:05:01,050 --> 00:05:03,990
‫Et donc ce validateur est assez spécifique

106
00:05:03,990 --> 00:05:05,890
‫donc c'est vraiment bien.

107
00:05:05,890 --> 00:05:09,080
‫Maintenant, si nous le faisons comme ça, alors bien sûr, cela devrait fonctionner.

108
00:05:09,080 --> 00:05:11,000
‫Mais de toute façon, ce que nous

109
00:05:11,000 --> 00:05:13,860
‫voulions tester ici, ce sont ces différents mots de passe, d'accord ?

110
00:05:13,860 --> 00:05:15,460
‫Et je me souviens maintenant

111
00:05:15,460 --> 00:05:18,493
‫que nous n'avons pas créé de message d'erreur, je crois.

112
00:05:19,430 --> 00:05:21,070
‫Et oui, nous ne l'avons pas fait.

113
00:05:21,070 --> 00:05:22,993
‫Et donc, ajoutons cela ici aussi.

114
00:05:25,120 --> 00:05:26,113
‫Donc message, ne

115
00:05:28,510 --> 00:05:29,510
‫sont pas les

116
00:05:30,930 --> 00:05:31,803
‫mêmes.

117
00:05:32,900 --> 00:05:33,733
‫D'accord.

118
00:05:35,580 --> 00:05:38,390
‫Ajoutons donc quelque chose ici, peu importe.

119
00:05:38,390 --> 00:05:42,613
‫Et maintenant, les mots de passe ne sont pas les mêmes, d'accord ?

120
00:05:43,460 --> 00:05:45,233
‫Tellement parfait.

121
00:05:45,233 --> 00:05:48,333
‫Et maintenant bien sûr notre validation devrait être passée.

122
00:05:49,640 --> 00:05:53,690
‫Et effectivement, c'est le cas et nous avons créé notre nouvel utilisateur.

123
00:05:53,690 --> 00:05:55,900
‫Passons à Compass ici, jetons

124
00:05:55,900 --> 00:05:58,640
‫un coup d'œil, puis supprimez-le afin que

125
00:05:58,640 --> 00:06:02,953
‫je puisse plus tard créer plus d'utilisateurs avec le même e-mail.

126
00:06:04,330 --> 00:06:05,163
‫D'accord?

127
00:06:05,163 --> 00:06:07,310
‫Et de toute façon, nous ne voulons pas de

128
00:06:07,310 --> 00:06:09,990
‫tous ces déchets ici, donc tous ces utilisateurs de test, d'accord ?

129
00:06:09,990 --> 00:06:13,330
‫Mais maintenant, la prochaine étape consiste à crypter ces mots

130
00:06:13,330 --> 00:06:15,560
‫de passe simples que nous stockons actuellement

131
00:06:15,560 --> 00:06:17,570
‫dans notre base de données.

132
00:06:17,570 --> 00:06:19,940
‫Donc, comme je l'ai mentionné dans la dernière

133
00:06:19,940 --> 00:06:21,950
‫vidéo, lorsque nous travaillons avec l'authentification,

134
00:06:21,950 --> 00:06:24,220
‫l'un des principes les plus fondamentaux est

135
00:06:24,220 --> 00:06:29,090
‫de ne jamais stocker de mots de passe simples dans une base de données, d'accord ?

136
00:06:29,090 --> 00:06:33,170
‫C'est donc quelque chose qui n'est absolument pas acceptable, d'accord ?

137
00:06:33,170 --> 00:06:36,650
‫Nous devrions donc toujours crypter les mots de passe des utilisateurs car

138
00:06:36,650 --> 00:06:38,510
‫imaginez que pour une raison quelconque,

139
00:06:38,510 --> 00:06:41,250
‫un pirate informatique accède à la base de données.

140
00:06:41,250 --> 00:06:44,880
‫Si les mots de passe y sont stockés en clair, alors il

141
00:06:44,880 --> 00:06:47,550
‫peut simplement se connecter en tant qu'utilisateur, puis

142
00:06:47,550 --> 00:06:49,720
‫faire ce qu'il veut vraiment et

143
00:06:49,720 --> 00:06:52,730
‫causer beaucoup de dégâts dans certains cas, d'accord ?

144
00:06:52,730 --> 00:06:55,770
‫Et donc nous devons absolument empêcher cela.

145
00:06:55,770 --> 00:06:58,563
‫Et donc allons de l'avant et mettons cela en œuvre.

146
00:06:59,870 --> 00:07:03,610
‫Maintenant, quel est le meilleur endroit pour le faire ?

147
00:07:03,610 --> 00:07:07,270
‫Eh bien, je dirais que le modèle est toujours le meilleur

148
00:07:07,270 --> 00:07:10,160
‫endroit pour faire ce genre de fonctionnalité.

149
00:07:10,160 --> 00:07:12,110
‫Donc dans ce cas, le chiffrement parce

150
00:07:12,110 --> 00:07:14,960
‫qu'il a vraiment à voir avec les données elles-mêmes et

151
00:07:14,960 --> 00:07:16,730
‫donc il devrait être sur

152
00:07:16,730 --> 00:07:19,070
‫le modèle et non dans le contrôleur, d'accord ?

153
00:07:19,070 --> 00:07:22,022
‫Donc, encore une fois, gardez à l'esprit la philosophie des gros

154
00:07:22,022 --> 00:07:24,040
‫modèles et des contrôleurs minces ici.

155
00:07:24,040 --> 00:07:24,873
‫D'accord?

156
00:07:27,260 --> 00:07:31,170
‫Alors, comment allons-nous maintenant implémenter ce cryptage ?

157
00:07:31,170 --> 00:07:33,660
‫Eh bien, c'est un autre cas d'utilisation

158
00:07:33,660 --> 00:07:36,050
‫parfait pour utiliser le middleware Mongoose.

159
00:07:36,050 --> 00:07:37,430
‫Et celui que nous

160
00:07:37,430 --> 00:07:39,210
‫allons utiliser est un middleware de pré-sauvegarde.

161
00:07:39,210 --> 00:07:42,630
‫Donc, en gros, documentez le middleware, d'accord ?

162
00:07:42,630 --> 00:07:47,630
‫Alors, rappelez-vous que nous avons défini cela sur le schéma, d'accord ?

163
00:07:47,760 --> 00:07:50,130
‫Et dans ce cas, nous voulons définir

164
00:07:50,130 --> 00:07:52,928
‫un pré-crochet, donc un pré-middleware à l'enregistrement, d'accord ?

165
00:07:52,928 --> 00:07:54,490
‫donc un pré-middleware à l'enregistrement, d'accord ?

166
00:07:54,490 --> 00:07:56,750
‫Et la raison pour laquelle nous le

167
00:07:56,750 --> 00:07:58,320
‫faisons comme ça est

168
00:07:58,320 --> 00:08:01,240
‫que la fonction middleware que nous allons spécifier ici, donc

169
00:08:01,240 --> 00:08:03,660
‫le cryptage, va alors se produire entre le

170
00:08:03,660 --> 00:08:05,990
‫moment où nous recevons ces données et le

171
00:08:05,990 --> 00:08:09,340
‫moment où elles sont réellement persistées jusqu'au base de données, d'accord ?

172
00:08:09,340 --> 00:08:12,200
‫C'est donc là que s'exécute le middleware de pré-enregistrement.

173
00:08:12,200 --> 00:08:15,600
‫Entre l'obtention des données et leur enregistrement dans la base de données.

174
00:08:15,600 --> 00:08:19,210
‫Et c'est donc le moment idéal pour manipuler les données.

175
00:08:19,210 --> 00:08:20,420
‫D'accord?

176
00:08:20,420 --> 00:08:21,253
‫Donc,

177
00:08:22,480 --> 00:08:26,010
‫une fonction, et puis rappelons-nous que nous avons accès

178
00:08:26,010 --> 00:08:29,740
‫à la fonction suivante afin d'appeler le prochain middleware.

179
00:08:29,740 --> 00:08:33,220
‫D'accord, maintenant nous ne voulons crypter le mot de passe que

180
00:08:33,220 --> 00:08:37,400
‫si le champ du mot de passe a été mis à jour, d'accord ?

181
00:08:37,400 --> 00:08:40,900
‫Donc, en gros, seulement lorsque le mot de passe est vraiment modifié

182
00:08:40,900 --> 00:08:43,370
‫ou également lorsqu'il est créé, d'accord ?

183
00:08:43,370 --> 00:08:46,890
‫Parce qu'imaginez que l'utilisateur ne fait que mettre à jour l'e-mail.

184
00:08:46,890 --> 00:08:48,340
‫Alors dans ce cas, bien

185
00:08:48,340 --> 00:08:51,760
‫sûr, nous ne voulons pas crypter à nouveau le mot de passe, n'est-ce pas ?

186
00:08:51,760 --> 00:08:54,420
‫Et donc nous pouvons le faire avec Mongoose.

187
00:08:54,420 --> 00:08:58,130
‫Et donc nous allons dire, si et ensuite ceci, qui fait

188
00:08:58,130 --> 00:09:00,840
‫référence au document actuel, n'est-ce pas ?

189
00:09:00,840 --> 00:09:03,070
‫Et donc dans ce cas, à l'utilisateur

190
00:09:03,070 --> 00:09:04,583
‫courant puis est modifié.

191
00:09:06,690 --> 00:09:07,523
‫D'accord?

192
00:09:07,523 --> 00:09:10,670
‫Nous avons donc une méthode sur tous les documents que nous

193
00:09:10,670 --> 00:09:13,260
‫pouvons utiliser si un certain champ a été modifié.

194
00:09:13,260 --> 00:09:16,270
‫Et donc ici, il faut passer le nom du champ, donc

195
00:09:16,270 --> 00:09:18,773
‫"mot de passe. " D'accord?

196
00:09:18,773 --> 00:09:21,080
‫Et donc fondamentalement, ce que nous voulons

197
00:09:21,080 --> 00:09:24,440
‫faire ici, c'est dire que si le mot de passe n'a

198
00:09:24,440 --> 00:09:27,540
‫pas été modifié, alors non, alors dans ce cas, revenons

199
00:09:27,540 --> 00:09:30,520
‫simplement de cette fonction et n'exécutons aucun des autres

200
00:09:30,520 --> 00:09:32,320
‫codes qui se trouvent ici, puis

201
00:09:33,160 --> 00:09:34,863
‫appelons le prochain middleware.

202
00:09:35,834 --> 00:09:36,667
‫D'accord?

203
00:09:37,930 --> 00:09:41,170
‫Encore une fois, si le mot de passe n'a pas été

204
00:09:41,170 --> 00:09:42,810
‫modifié, sortons simplement de cette

205
00:09:42,810 --> 00:09:44,600
‫fonction et appelons le middleware suivant.

206
00:09:44,600 --> 00:09:46,770
‫Sinon, nous exécuterons ensuite le code

207
00:09:46,770 --> 00:09:48,580
‫que je vais mettre ici.

208
00:09:48,580 --> 00:09:51,270
‫Et maintenant, il est enfin temps de crypter,

209
00:09:51,270 --> 00:09:55,200
‫ou comme on peut aussi dire, de hacher le mot de passe, d'accord ?

210
00:09:55,200 --> 00:09:58,490
‫Vous verrez donc le terme « hachage » ou « hachage

211
00:09:58,490 --> 00:10:01,890
‫» tout le temps et cela signifie donc également le cryptage, d’accord ?

212
00:10:01,890 --> 00:10:05,440
‫Maintenant, nous allons faire ce cryptage, ou

213
00:10:05,440 --> 00:10:08,580
‫hachage, en utilisant un algorithme de

214
00:10:08,580 --> 00:10:13,230
‫hachage très connu, bien étudié et très populaire appelé bcrypt.

215
00:10:13,230 --> 00:10:14,290
‫D'accord?

216
00:10:14,290 --> 00:10:18,200
‫Donc, cet algorithme va d'abord saler puis hacher notre mot de passe

217
00:10:18,200 --> 00:10:21,130
‫afin de le rendre vraiment fort pour le protéger

218
00:10:21,130 --> 00:10:23,760
‫contre les attaques par force brute, d'accord ?

219
00:10:23,760 --> 00:10:25,280
‫Et c'est donc toute la

220
00:10:25,280 --> 00:10:27,600
‫raison pour laquelle le cryptage doit être vraiment fort.

221
00:10:27,600 --> 00:10:30,360
‫Parce que les attaques par force brute pourraient essayer

222
00:10:30,360 --> 00:10:34,040
‫de deviner certains mots de passe s'ils ne sont pas vraiment cryptés.

223
00:10:34,040 --> 00:10:37,990
‫Et rappelez-vous comment j'ai dit que bcrypt va saler notre mot de passe

224
00:10:37,990 --> 00:10:40,950
‫et cela signifie simplement qu'il va ajouter une chaîne aléatoire

225
00:10:40,950 --> 00:10:44,500
‫au mot de passe afin que deux mots de passe égaux

226
00:10:44,500 --> 00:10:47,430
‫ne génèrent pas le même hachage, d'accord ?

227
00:10:47,430 --> 00:10:48,490
‫Avoir du sens ?

228
00:10:48,490 --> 00:10:51,520
‫Maintenant, je ne vais pas entrer dans tous les détails cryptographiques sur

229
00:10:51,520 --> 00:10:53,940
‫la façon dont cela fonctionne vraiment dans les coulisses

230
00:10:53,940 --> 00:10:56,850
‫et pourquoi nous avons besoin d'un système aussi complexe, d'accord ?

231
00:10:56,850 --> 00:11:00,140
‫Mais bien sûr, vous pouvez lire tout ce que vous voulez sur bcrypt en ligne.

232
00:11:00,140 --> 00:11:02,830
‫Il y a vraiment une tonne de choses

233
00:11:02,830 --> 00:11:05,290
‫intéressantes à découvrir là-bas, d'accord ?

234
00:11:05,290 --> 00:11:09,270
‫Quoi qu'il en soit, allons maintenant de l'avant et utilisons le

235
00:11:09,270 --> 00:11:12,133
‫package bcrypt js afin d'utiliser cet algorithme.

236
00:11:13,790 --> 00:11:14,623
‫Donc, donc

237
00:11:15,560 --> 00:11:16,393
‫npm install

238
00:11:16,393 --> 00:11:17,660
‫donc npm install

239
00:11:19,156 --> 00:11:21,655
‫bcryptjs.

240
00:11:21,655 --> 00:11:22,488
‫D'accord?

241
00:11:22,488 --> 00:11:25,410
‫Et donc, il s'agit essentiellement d'une implémentation

242
00:11:25,410 --> 00:11:26,713
‫bcrypt pour Javascript.

243
00:11:27,650 --> 00:11:28,750
‫D'accord?

244
00:11:28,750 --> 00:11:30,720
‫Revenons à notre terminal principal,

245
00:11:32,550 --> 00:11:34,513
‫puis importons-le ici.

246
00:11:36,092 --> 00:11:40,820
‫Et celui-ci s'appelle par défaut uniquement bcrypt, d'accord ?

247
00:11:40,820 --> 00:11:41,873
‫Et pas bcryptjs.

248
00:11:42,889 --> 00:11:50,163
‫(clavier cliquable) D'accord.

249
00:11:53,360 --> 00:11:54,193
‫D'accord.

250
00:11:54,193 --> 00:11:56,033
‫Et maintenant, utilisons-le réellement.

251
00:11:56,970 --> 00:12:00,293
‫Donc, nous voulons dire que ce mot de passe dot, donc

252
00:12:01,370 --> 00:12:03,510
‫le mot de passe actuel dans ce

253
00:12:04,590 --> 00:12:07,381
‫document doit être égal à bcrypt dot hash doit

254
00:12:07,381 --> 00:12:10,214
‫être égal à bcrypt dot hash puis à notre

255
00:12:11,600 --> 00:12:13,100
‫mot de passe actuel.

256
00:12:14,640 --> 00:12:15,473
‫D'accord?

257
00:12:15,473 --> 00:12:19,600
‫Et puis ici, nous devons spécifier un paramètre de coût, d'accord ?

258
00:12:19,600 --> 00:12:22,100
‫Et nous pourrions en fait le faire de deux manières.

259
00:12:22,100 --> 00:12:25,700
‫Donc, la première façon sera de générer manuellement le sel, de

260
00:12:25,700 --> 00:12:27,740
‫sorte que cette chaîne aléatoire en gros,

261
00:12:27,740 --> 00:12:29,727
‫qui sera ajoutée à notre

262
00:12:29,727 --> 00:12:33,770
‫mot de passe, puis utilisera ce sel ici dans cette fonction de hachage.

263
00:12:33,770 --> 00:12:34,603
‫D'accord?

264
00:12:34,603 --> 00:12:36,480
‫Mais à la place, pour le rendre

265
00:12:36,480 --> 00:12:39,260
‫un peu plus facile, nous pouvons aussi simplement passer ici un paramètre

266
00:12:39,260 --> 00:12:40,620
‫de coût dans cette fonction.

267
00:12:40,620 --> 00:12:42,920
‫Et c'est donc essentiellement une

268
00:12:42,920 --> 00:12:47,360
‫mesure de l'intensité du processeur de cette opération, d'accord ?

269
00:12:47,360 --> 00:12:50,230
‫Et la valeur par défaut ici, je crois, est de 10,

270
00:12:50,230 --> 00:12:53,130
‫mais pour le moment, c'est un peu mieux d'utiliser 12 parce

271
00:12:53,130 --> 00:12:55,810
‫que les ordinateurs sont devenus de plus en plus puissants.

272
00:12:55,810 --> 00:12:58,800
‫Donc, comme il y a 20 ans, vous auriez pu en

273
00:12:58,800 --> 00:13:01,170
‫utiliser huit ici, puis un peu plus

274
00:13:01,170 --> 00:13:04,670
‫tard que 10, mais à l'heure actuelle, il est préférable d'en utiliser 12.

275
00:13:04,670 --> 00:13:06,610
‫Et donc plus ce coût

276
00:13:06,610 --> 00:13:09,610
‫est élevé ici, plus le processus sera gourmand en

277
00:13:09,610 --> 00:13:13,350
‫CPU et mieux le mot de passe sera crypté, d'accord ?

278
00:13:13,350 --> 00:13:15,070
‫Et bien sûr, nous pourrions aller encore

279
00:13:15,070 --> 00:13:17,750
‫plus haut, mais cela prendrait beaucoup trop de temps, d'accord ?

280
00:13:17,750 --> 00:13:20,330
‫Et je vais vous le montrer dans une seconde.

281
00:13:20,330 --> 00:13:21,163
‫D'accord?

282
00:13:21,163 --> 00:13:22,910
‫Mais pour l'instant, terminons

283
00:13:22,910 --> 00:13:26,060
‫en fait ceci car il reste une chose ici.

284
00:13:26,060 --> 00:13:29,040
‫Donc, ce hachage ici est en fait la version asynchrone,

285
00:13:29,040 --> 00:13:31,440
‫mais il existe également une version synchrone.

286
00:13:31,440 --> 00:13:33,960
‫Mais comme vous le savez déjà, nous ne

287
00:13:33,960 --> 00:13:35,313
‫voulons pas utiliser

288
00:13:35,313 --> 00:13:38,810
‫la version synchrone car cela bloquera la boucle d'événement et empêchera

289
00:13:38,810 --> 00:13:41,000
‫ensuite les autres utilisateurs d'utiliser l'application.

290
00:13:41,000 --> 00:13:43,350
‫Donc, tout comme nous l'avons appris au début.

291
00:13:43,350 --> 00:13:45,230
‫Et donc bien sûr nous

292
00:13:45,230 --> 00:13:48,130
‫souhaitons utiliser la version asynchrone qui est celle-ci.

293
00:13:48,130 --> 00:13:50,210
‫Et cela renverra alors une

294
00:13:50,210 --> 00:13:53,860
‫promesse et cette promesse, bien sûr, nous devons l'attendre.

295
00:13:53,860 --> 00:13:58,860
‫Et donc, nous devons utiliser wait, puis dire que cette

296
00:13:58,960 --> 00:14:02,513
‫fonction est une fonction asynchrone, comme celle-ci.

297
00:14:04,730 --> 00:14:06,860
‫Alors, récapitulons cela ici.

298
00:14:06,860 --> 00:14:09,780
‫Donc, nous voulons définir notre mot de passe actuel

299
00:14:09,780 --> 00:14:14,780
‫essentiellement pour crypter cette version du mot de passe d'origine avec un coût de 12, pour

300
00:14:14,780 --> 00:14:17,500
‫ne pas le rendre trop facile à casser

301
00:14:17,500 --> 00:14:21,690
‫le mot de passe, mais aussi pour ne pas faire en sorte que

302
00:14:21,690 --> 00:14:25,423
‫l'application prenne trop de temps pour crypter le mot de passe, d'accord?

303
00:14:25,423 --> 00:14:27,920
‫Donc, avec cela, nous avons chiffré notre mot de passe

304
00:14:27,920 --> 00:14:30,070
‫et maintenant à la fin, ce que

305
00:14:30,070 --> 00:14:33,840
‫nous devons faire, c'est essentiellement supprimer le mot de passe de confirmation, d'accord ?

306
00:14:33,840 --> 00:14:35,670
‫Parce qu'à ce stade, nous n'avons

307
00:14:35,670 --> 00:14:38,663
‫que le vrai mot de passe haché, n'est-ce pas ?

308
00:14:40,560 --> 00:14:42,489
‫Donc, cette confirmation de mot de passe

309
00:14:42,489 --> 00:14:43,643
‫à points, donc, cette

310
00:14:43,643 --> 00:14:45,980
‫confirmation de mot de passe à points, et comment

311
00:14:45,980 --> 00:14:48,740
‫nous supprimons fondamentalement le champ, donc ne pas persister dans la

312
00:14:48,740 --> 00:14:51,440
‫base de données consiste à le définir sur non défini.

313
00:14:51,440 --> 00:14:52,400
‫D'accord?

314
00:14:52,400 --> 00:14:55,970
‫Donc, nous n'avons vraiment besoin de ce mot de passe confirmé ici

315
00:14:55,970 --> 00:14:58,950
‫que pour la validation que nous avons implémentée auparavant.

316
00:14:58,950 --> 00:15:00,730
‫Donc, juste pour s'assurer que

317
00:15:00,730 --> 00:15:03,160
‫l'utilisateur a bien entré deux mots de passe

318
00:15:03,160 --> 00:15:06,660
‫égaux afin qu'il ne fasse aucune erreur avec son mot de passe.

319
00:15:06,660 --> 00:15:07,590
‫Droit?

320
00:15:07,590 --> 00:15:10,300
‫Et donc une fois cette validation réussie,

321
00:15:10,300 --> 00:15:13,060
‫nous n'avons plus besoin de ce champ donc nous

322
00:15:13,060 --> 00:15:16,710
‫ne voulons vraiment pas le persister dans la base de données.

323
00:15:16,710 --> 00:15:20,130
‫Et c'est pourquoi nous l'avons simplement défini ici sur undefined.

324
00:15:20,130 --> 00:15:21,150
‫D'accord?

325
00:15:21,150 --> 00:15:23,220
‫Maintenant, vous vous demandez peut-être pourquoi cela fonctionne, car

326
00:15:23,220 --> 00:15:25,920
‫nous avons en fait défini la confirmation du mot de passe

327
00:15:25,920 --> 00:15:27,800
‫sur une valeur requise, n'est-ce pas ?

328
00:15:27,800 --> 00:15:30,750
‫Mais cela signifie simplement qu'il s'agit d'une entrée requise,

329
00:15:30,750 --> 00:15:33,650
‫et non qu'elle doit être conservée dans la base

330
00:15:33,650 --> 00:15:35,149
‫de données, d'accord ?

331
00:15:35,149 --> 00:15:36,982
‫à la base de données, d'accord ?

332
00:15:38,393 --> 00:15:42,390
‫Maintenant, juste pour terminer, nous devons bien sûr également appeler ensuite.

333
00:15:42,390 --> 00:15:43,240
‫D'accord?

334
00:15:43,240 --> 00:15:44,290
‫Faisons une sauvegarde.

335
00:15:45,640 --> 00:15:47,440
‫Et en fait, je vais ajouter quelques commentaires

336
00:15:47,440 --> 00:15:49,370
‫ici pour que ce soit vraiment clair pour vous.

337
00:15:49,370 --> 00:15:52,400
‫Donc, fondamentalement, ce que cela fait, c'est de n'exécuter cette

338
00:15:54,180 --> 00:15:55,050
‫fonction que

339
00:15:56,160 --> 00:15:57,190
‫si le mot

340
00:15:58,930 --> 00:16:00,533
‫de passe a été réellement modifié.

341
00:16:05,070 --> 00:16:05,903
‫Ensuite, ici,

342
00:16:08,840 --> 00:16:11,803
‫hachez le mot de passe avec un coût de 12.

343
00:16:14,785 --> 00:16:16,300
‫Et puis, supprimez

344
00:16:16,300 --> 00:16:19,443
‫le champ de confirmation du mot de passe.

345
00:16:20,750 --> 00:16:21,583
‫D'accord.

346
00:16:21,583 --> 00:16:24,453
‫Et maintenant, allons-y et testons cela.

347
00:16:25,660 --> 00:16:29,590
‫Et je vais maintenant créer un nouvel utilisateur avec exactement ces

348
00:16:29,590 --> 00:16:32,470
‫données et jetons maintenant un œil au résultat.

349
00:16:32,470 --> 00:16:36,460
‫Et en effet, nous obtenons maintenant ce mot de passe très

350
00:16:36,460 --> 00:16:40,163
‫étrange qui est en fait la version cryptée de pass1234.

351
00:16:41,410 --> 00:16:45,580
‫Et aussi, comme vous le voyez, la confirmation du mot de passe n'est plus là.

352
00:16:45,580 --> 00:16:46,413
‫D'accord?

353
00:16:46,413 --> 00:16:48,930
‫Et donc juste comme ça, nous avons maintenant stocké les

354
00:16:48,930 --> 00:16:51,353
‫utilisateurs de manière sécurisée dans notre base de données.

355
00:16:52,280 --> 00:16:55,310
‫Permettez-moi maintenant de vous montrer comment cela fonctionnera si,

356
00:16:55,310 --> 00:16:58,233
‫par exemple, nous le réglons sur 16 ici.

357
00:17:00,740 --> 00:17:02,540
‫Et je dois changer l'email ici.

358
00:17:03,540 --> 00:17:07,120
‫Et donc cela devrait maintenant prendre beaucoup de temps et je ne suis

359
00:17:07,120 --> 00:17:09,180
‫même pas sûr de pouvoir attendre.

360
00:17:09,180 --> 00:17:12,490
‫Oh, en fait, cela a pris environ quatre secondes et demie.

361
00:17:12,490 --> 00:17:17,320
‫Mais c'est encore un peu trop je crois, d'accord ?

362
00:17:17,320 --> 00:17:18,980
‫Alors, replaçons-le sur

363
00:17:18,980 --> 00:17:20,330
‫12 et

364
00:17:21,410 --> 00:17:24,507
‫ça devrait être mieux, d'accord ?

365
00:17:24,507 --> 00:17:26,670
‫Et maintenant, supprimons encore une

366
00:17:26,670 --> 00:17:29,630
‫fois ces utilisateurs que nous venons de créer.

367
00:17:29,630 --> 00:17:32,110
‫Et en fait, je dois me débarrasser

368
00:17:32,110 --> 00:17:36,000
‫de ce premier car celui-ci a toujours le mot de passe en clair.

369
00:17:36,000 --> 00:17:38,090
‫Et donc cet utilisateur ne fonctionnera

370
00:17:38,090 --> 00:17:40,370
‫pas lorsque nous commencerons à connecter les utilisateurs

371
00:17:40,370 --> 00:17:42,621
‫en fonction de leur mot de passe.

372
00:17:42,621 --> 00:17:44,250
‫D'accord?

373
00:17:44,250 --> 00:17:45,743
‫Alors débarrassons-nous de cela.

374
00:17:52,780 --> 00:17:54,060
‫D'accord?

375
00:17:54,060 --> 00:17:56,170
‫Et aussi ce que je voulais vous montrer

376
00:17:57,510 --> 00:17:59,880
‫ici, c'est que nous avons mis exactement le même mot de

377
00:17:59,880 --> 00:18:02,390
‫passe pour ces deux utilisateurs que nous avons créés, n'est-ce pas ?

378
00:18:02,390 --> 00:18:04,520
‫Mais vous voyez que le mot

379
00:18:04,520 --> 00:18:07,630
‫de passe crypté est en fait très différent, non ?

380
00:18:07,630 --> 00:18:09,820
‫Et c'est donc le pouvoir de saler le mot de

381
00:18:09,820 --> 00:18:11,043
‫passe avant de le hacher.

382
00:18:12,220 --> 00:18:13,060
‫D'accord?

383
00:18:13,060 --> 00:18:17,250
‫Alors juste comme ça, nous avons, encore une fois, mis en place une gestion des

384
00:18:17,250 --> 00:18:19,313
‫mots de passe très sécurisée et bonne.

