﻿1
00:00:01,120 --> 00:00:02,370
‫Istruttore: Quindi in

2
00:00:02,370 --> 00:00:06,430
‫questa lezione, gestiremo le password dei nostri utenti nel database.

3
00:00:06,430 --> 00:00:08,790
‫E con ciò intendo prima

4
00:00:08,790 --> 00:00:12,660
‫convalidare se la password immessa è uguale alla password

5
00:00:12,660 --> 00:00:16,380
‫confermata e quindi anche crittografare la password nel database

6
00:00:16,380 --> 00:00:18,633
‫per proteggerla dagli attacchi.

7
00:00:20,320 --> 00:00:22,330
‫E quindi la prima cosa

8
00:00:22,330 --> 00:00:26,690
‫che faremo è convalidare se le due password immesse sono le stesse.

9
00:00:26,690 --> 00:00:28,840
‫E il posto migliore per

10
00:00:28,840 --> 00:00:31,760
‫farlo è qui nella conferma della password, ok?

11
00:00:31,760 --> 00:00:36,283
‫E quindi scriviamo il nostro validatore personalizzato per quello, va bene?

12
00:00:38,480 --> 00:00:41,890
‫Quindi ricorda, usiamo la proprietà validate e quindi,

13
00:00:41,890 --> 00:00:44,270
‫poiché vogliamo creare una funzione

14
00:00:44,270 --> 00:00:48,420
‫e anche un messaggio di errore, apriamo un nuovo oggetto

15
00:00:49,480 --> 00:00:51,990
‫qui e poi lì creiamo validatore,

16
00:00:51,990 --> 00:00:53,920
‫che sarà la

17
00:00:53,920 --> 00:00:56,370
‫funzione e iniziamo effettivamente con questo.

18
00:00:56,370 --> 00:00:58,780
‫Quindi, ricorda, tutto ciò di cui abbiamo bisogno qui

19
00:00:58,780 --> 00:01:01,770
‫è specificare una semplice funzione di callback che verrà quindi chiamata

20
00:01:01,770 --> 00:01:03,853
‫quando verrà creato il nuovo documento.

21
00:01:04,940 --> 00:01:06,163
‫Quindi, funzione, e

22
00:01:07,210 --> 00:01:10,320
‫anche qui, non possiamo usare una funzione freccia perché in

23
00:01:10,320 --> 00:01:13,183
‫realtà abbiamo bisogno di usare la parola chiave disk.

24
00:01:14,690 --> 00:01:15,523
‫Bene?

25
00:01:16,560 --> 00:01:19,180
‫Quindi, ricorda che dalla funzione di convalida

26
00:01:19,180 --> 00:01:21,470
‫restituiamo vero o falso

27
00:01:21,470 --> 00:01:23,960
‫e se il valore restituito è

28
00:01:23,960 --> 00:01:27,550
‫falso, significa che otterremo un errore di convalida, ok?

29
00:01:27,550 --> 00:01:29,630
‫E, naturalmente, se è vero, allora no.

30
00:01:29,630 --> 00:01:33,820
‫E quindi quello che vogliamo qui è dire che l'elemento corrente so,

31
00:01:33,820 --> 00:01:37,643
‫password confirm, è uguale a questa password con punto, quindi, password

32
00:01:37,643 --> 00:01:40,760
‫confirm, è uguale a questa password con punto,

33
00:01:40,760 --> 00:01:42,350
‫ed è proprio così!

34
00:01:42,350 --> 00:01:46,510
‫Quindi, ad esempio, se la conferma della password è

35
00:01:46,510 --> 00:01:49,520
‫A-B-C e anche la password è

36
00:01:49,520 --> 00:01:52,530
‫A-B-C, questo ovviamente tornerà vero, ok?

37
00:01:52,530 --> 00:01:54,330
‫E quindi la convalida viene

38
00:01:54,330 --> 00:01:56,550
‫passata e non si verificherà alcun errore.

39
00:01:56,550 --> 00:02:00,440
‫Ma, se la password iniziale è, diciamo, X-Y-Z, allora

40
00:02:00,440 --> 00:02:02,860
‫ovviamente questo tornerà falso

41
00:02:02,860 --> 00:02:05,820
‫e avremo un errore di convalida, ok?

42
00:02:05,820 --> 00:02:08,660
‫Quindi, molto semplice, ma dobbiamo tenere

43
00:02:08,660 --> 00:02:12,320
‫a mente che funzionerà solo sul salvataggio, ok?

44
00:02:12,320 --> 00:02:13,950
‫Ne ho parlato prima

45
00:02:13,950 --> 00:02:17,840
‫quando abbiamo usato il validatore personalizzato sul modello del tour, giusto?

46
00:02:17,840 --> 00:02:19,740
‫Ma te lo sto ricordando

47
00:02:19,740 --> 00:02:24,120
‫di nuovo qui perché questo è assolutamente cruciale qui a questo punto, ok?

48
00:02:24,120 --> 00:02:26,423
‫Quindi lascia che te lo scriva qui.

49
00:02:27,739 --> 00:02:29,010
‫(clic

50
00:02:29,010 --> 00:02:30,410
‫sulla tastiera)

51
00:02:30,410 --> 00:02:32,050
‫Al salvataggio.

52
00:02:32,050 --> 00:02:32,883
‫Bene?

53
00:02:32,883 --> 00:02:35,740
‫E per questo, ogni volta che vorremo aggiornare un

54
00:02:35,740 --> 00:02:38,250
‫utente, dovremo sempre usare anche il salvataggio e

55
00:02:38,250 --> 00:02:41,010
‫non, ad esempio, trovarne uno e aggiornarlo come abbiamo

56
00:02:41,010 --> 00:02:43,310
‫fatto con i nostri tour, ok?

57
00:02:43,310 --> 00:02:45,570
‫Quindi teniamolo a mente

58
00:02:45,570 --> 00:02:48,730
‫quando scriviamo il resto del codice nel resto

59
00:02:48,730 --> 00:02:51,670
‫della sezione e soprattutto per l'aggiornamento, ok?

60
00:02:51,670 --> 00:02:54,400
‫Perché diciamo che abbiamo aggiornato la password dell'utente

61
00:02:54,400 --> 00:02:56,320
‫semplicemente con un aggiornamento regolare.

62
00:02:56,320 --> 00:02:58,910
‫Quindi, in tal caso, questa password conferma

63
00:02:58,910 --> 00:03:01,540
‫la convalida che abbiamo qui non funzionerebbe più, ok?

64
00:03:01,540 --> 00:03:04,670
‫E ovviamente questo non può succedere, ok?

65
00:03:04,670 --> 00:03:08,410
‫E quindi, ancora una volta, tieni presente che funzionerà

66
00:03:08,410 --> 00:03:12,920
‫solo quando creiamo un nuovo oggetto, quindi su dot create o su save.

67
00:03:12,920 --> 00:03:13,753
‫Bene?

68
00:03:13,753 --> 00:03:15,524
‫Quindi, su crea e

69
00:03:15,524 --> 00:03:18,550
‫salva, quindi, su crea e salva, va

70
00:03:18,550 --> 00:03:19,383
‫bene?

71
00:03:19,383 --> 00:03:22,830
‫Quindi creiamo un nuovo oggetto usando create, giusto?

72
00:03:22,830 --> 00:03:25,431
‫Quindi, proprio qui, abbiamo usato un punto create Quindi,

73
00:03:25,431 --> 00:03:27,100
‫proprio qui, abbiamo usato un

74
00:03:27,100 --> 00:03:28,463
‫punto create ma

75
00:03:28,463 --> 00:03:31,143
‫ricordate come vi ho anche mostrato che possiamo usare

76
00:03:33,100 --> 00:03:35,160
‫un salvataggio punto dell'utente, come questo, giusto?

77
00:03:35,160 --> 00:03:38,470
‫E in effetti, possiamo anche usare un punto

78
00:03:38,470 --> 00:03:41,550
‫di salvataggio dell'utente per aggiornare l'utente, ok?

79
00:03:41,550 --> 00:03:43,593
‫Ma di nuovo, ne parleremo un po' più tardi.

80
00:03:44,820 --> 00:03:45,810
‫Bene?

81
00:03:45,810 --> 00:03:50,063
‫Quindi ora proviamo questa convalida qui, ok?

82
00:03:51,230 --> 00:03:53,280
‫Quindi, prima di tutto, proviamo a

83
00:03:53,280 --> 00:03:55,210
‫creare un nuovo utente con

84
00:03:55,210 --> 00:03:57,660
‫questi dati qui che non dovrebbe funzionare perché

85
00:03:57,660 --> 00:04:01,020
‫abbiamo già un utente con questo indirizzo email e abbiamo detto

86
00:04:01,020 --> 00:04:03,290
‫che questo dovrebbe essere unico e quindi

87
00:04:03,290 --> 00:04:04,590
‫non dovrebbe funzionare.

88
00:04:06,330 --> 00:04:12,210
‫Ok, e quindi ovviamente il nostro errore di chiave duplicata, giusto?

89
00:04:12,210 --> 00:04:14,170
‫Ora, se fossi in

90
00:04:14,170 --> 00:04:17,040
‫produzione, ovviamente otterremmo già il nostro errore ben

91
00:04:17,040 --> 00:04:19,620
‫formattato che abbiamo creato nell'ultima sezione, giusto?

92
00:04:19,620 --> 00:04:23,730
‫Ma in questo momento siamo in fase di sviluppo e quindi questo è l'errore che

93
00:04:23,730 --> 00:04:25,383
‫abbiamo definito che vogliamo vedere.

94
00:04:26,510 --> 00:04:27,343
‫Bene?

95
00:04:28,440 --> 00:04:30,890
‫Quindi usiamo semplicemente un'altra e-mail qui

96
00:04:30,890 --> 00:04:33,060
‫e poiché stiamo lavorando sull'e-mail

97
00:04:33,060 --> 00:04:36,593
‫qui, vediamo anche come funziona la convalida dell'indirizzo e-mail.

98
00:04:37,650 --> 00:04:40,833
‫Quindi diciamo che abbiamo specificato questo come nostra email.

99
00:04:42,190 --> 00:04:47,663
‫E così, vediamo l'errore "fornisci un'email valida. " Bene?

100
00:04:48,660 --> 00:04:51,320
‫Quindi proviamolo in questo modo perché penso che anche

101
00:04:51,320 --> 00:04:53,120
‫questo non dovrebbe essere valido.

102
00:04:53,120 --> 00:04:55,043
‫Forse lo è, ma vediamo.

103
00:04:56,170 --> 00:04:57,840
‫E sì, in realtà non è

104
00:04:57,840 --> 00:05:01,050
‫perché non ci sono nomi di dominio con una sola lettera, ok?

105
00:05:01,050 --> 00:05:03,990
‫E quindi questo validatore è piuttosto specifico,

106
00:05:03,990 --> 00:05:05,890
‫quindi è davvero buono.

107
00:05:05,890 --> 00:05:09,080
‫Ora, se lo facciamo in questo modo, ovviamente dovrebbe funzionare.

108
00:05:09,080 --> 00:05:11,000
‫Ma comunque, quello che

109
00:05:11,000 --> 00:05:13,860
‫volevamo testare qui sono queste diverse password, ok?

110
00:05:13,860 --> 00:05:15,460
‫E ora ricordo che

111
00:05:15,460 --> 00:05:18,493
‫in realtà non abbiamo creato un messaggio di errore, credo.

112
00:05:19,430 --> 00:05:21,070
‫E sì, non l'abbiamo fatto.

113
00:05:21,070 --> 00:05:22,993
‫E quindi, aggiungiamo anche questo qui.

114
00:05:25,120 --> 00:05:26,113
‫Quindi messaggio, non

115
00:05:28,510 --> 00:05:29,510
‫sono la stessa

116
00:05:30,930 --> 00:05:31,803
‫cosa.

117
00:05:32,900 --> 00:05:33,733
‫Bene.

118
00:05:35,580 --> 00:05:38,390
‫Quindi aggiungiamo qualcosa qui, non importa.

119
00:05:38,390 --> 00:05:42,613
‫E quindi ora le password non sono le stesse, ok?

120
00:05:43,460 --> 00:05:45,233
‫Così perfetta.

121
00:05:45,233 --> 00:05:48,333
‫E ora, naturalmente, la nostra convalida dovrebbe essere passata.

122
00:05:49,640 --> 00:05:53,690
‫E infatti, lo è e abbiamo creato il nostro nuovo utente.

123
00:05:53,690 --> 00:05:55,900
‫Andiamo su Compass qui, diamo

124
00:05:55,900 --> 00:05:58,640
‫un'occhiata e poi effettivamente lo eliminiamo in modo

125
00:05:58,640 --> 00:06:02,953
‫che io possa in seguito creare più utenti con la stessa email.

126
00:06:04,330 --> 00:06:05,163
‫Tutto ok?

127
00:06:05,163 --> 00:06:07,310
‫E comunque non vogliamo tutta questa

128
00:06:07,310 --> 00:06:09,990
‫spazzatura qui, quindi tutti questi utenti di prova, ok?

129
00:06:09,990 --> 00:06:13,330
‫Ma ora, il prossimo passo è crittografare effettivamente queste

130
00:06:13,330 --> 00:06:15,560
‫semplici password che stiamo memorizzando nel

131
00:06:15,560 --> 00:06:17,570
‫nostro database in questo momento.

132
00:06:17,570 --> 00:06:19,940
‫Quindi, come ho detto nell'ultimo

133
00:06:19,940 --> 00:06:21,950
‫video, quando lavoriamo

134
00:06:21,950 --> 00:06:24,220
‫con l'autenticazione, uno dei principi

135
00:06:24,220 --> 00:06:29,090
‫fondamentali è non archiviare mai password semplici in un database, ok?

136
00:06:29,090 --> 00:06:33,170
‫Quindi è qualcosa che non è assolutamente accettabile, ok?

137
00:06:33,170 --> 00:06:36,650
‫Quindi dovremmo sempre crittografare le password degli utenti perché

138
00:06:36,650 --> 00:06:38,510
‫immaginiamo che per qualche

139
00:06:38,510 --> 00:06:41,250
‫motivo un hacker ottenga l'accesso al database.

140
00:06:41,250 --> 00:06:44,880
‫Se poi le password sono memorizzate in testo normale lì dentro,

141
00:06:44,880 --> 00:06:47,550
‫allora può semplicemente accedere come qualsiasi utente e

142
00:06:47,550 --> 00:06:49,720
‫poi fare quello che vuole

143
00:06:49,720 --> 00:06:52,730
‫veramente e causare molti danni in alcuni casi, ok?

144
00:06:52,730 --> 00:06:55,770
‫E quindi dobbiamo assolutamente impedirlo.

145
00:06:55,770 --> 00:06:58,563
‫E quindi ora andiamo avanti e implementiamo questo.

146
00:06:59,870 --> 00:07:03,610
‫Ora, qual è il posto migliore per farlo davvero?

147
00:07:03,610 --> 00:07:07,270
‫Bene, direi che il modello è sempre il posto

148
00:07:07,270 --> 00:07:10,160
‫migliore per fare questo tipo di funzionalità.

149
00:07:10,160 --> 00:07:12,110
‫Quindi, in questo caso, la crittografia

150
00:07:12,110 --> 00:07:14,960
‫perché ha davvero a che fare con i dati

151
00:07:14,960 --> 00:07:16,730
‫stessi e quindi dovrebbe essere

152
00:07:16,730 --> 00:07:19,070
‫sul modello e non nel controller, ok?

153
00:07:19,070 --> 00:07:22,022
‫Quindi, di nuovo, tieni a mente i modelli grassi

154
00:07:22,022 --> 00:07:24,040
‫e la filosofia dei controller sottili.

155
00:07:24,040 --> 00:07:24,873
‫Tutto ok?

156
00:07:27,260 --> 00:07:31,170
‫Quindi, come implementeremo ora questa crittografia?

157
00:07:31,170 --> 00:07:33,660
‫Bene, questo è un altro caso d'uso

158
00:07:33,660 --> 00:07:36,050
‫perfetto per l'utilizzo del middleware Mongoose.

159
00:07:36,050 --> 00:07:37,430
‫E quello che

160
00:07:37,430 --> 00:07:39,210
‫useremo è un middleware pre-salvataggio.

161
00:07:39,210 --> 00:07:42,630
‫Quindi in pratica il middleware per documenti, ok?

162
00:07:42,630 --> 00:07:47,630
‫Quindi, ricorda che l'abbiamo definito sullo schema, ok?

163
00:07:47,760 --> 00:07:50,130
‫E in questo caso, vogliamo impostare

164
00:07:50,130 --> 00:07:52,928
‫un pre-hook, quindi un pre-middleware al salvataggio, va bene?

165
00:07:52,928 --> 00:07:54,490
‫quindi un pre-middleware sul salvataggio, va bene?

166
00:07:54,490 --> 00:07:56,750
‫E il motivo per cui lo

167
00:07:56,750 --> 00:07:58,320
‫stiamo facendo in questo

168
00:07:58,320 --> 00:08:01,240
‫modo è che la funzione middleware che specificheremo qui,

169
00:08:01,240 --> 00:08:03,660
‫quindi la crittografia, avverrà tra il momento

170
00:08:03,660 --> 00:08:05,990
‫in cui riceviamo quei dati e il

171
00:08:05,990 --> 00:08:09,340
‫momento in cui sono effettivamente persistenti al banca dati, ok?

172
00:08:09,340 --> 00:08:12,200
‫Ecco dove viene eseguito il middleware di pre-salvataggio.

173
00:08:12,200 --> 00:08:15,600
‫Tra ottenere i dati e salvarli nel database.

174
00:08:15,600 --> 00:08:19,210
‫E quindi questo è il momento perfetto per manipolare i dati.

175
00:08:19,210 --> 00:08:20,420
‫Tutto ok?

176
00:08:20,420 --> 00:08:21,253
‫Quindi,

177
00:08:22,480 --> 00:08:26,010
‫una funzione, quindi ricordiamo che abbiamo accesso

178
00:08:26,010 --> 00:08:29,740
‫alla funzione successiva per chiamare il prossimo middleware.

179
00:08:29,740 --> 00:08:33,220
‫Ok, ora vogliamo crittografare la password solo

180
00:08:33,220 --> 00:08:37,400
‫se il campo della password è stato effettivamente aggiornato, ok?

181
00:08:37,400 --> 00:08:40,900
‫Quindi in pratica solo quando la password viene effettivamente cambiata o anche

182
00:08:40,900 --> 00:08:43,370
‫quando ne viene creata una nuova, ok?

183
00:08:43,370 --> 00:08:46,890
‫Perché immagina che l'utente stia solo aggiornando l'e-mail.

184
00:08:46,890 --> 00:08:48,340
‫Quindi in tal

185
00:08:48,340 --> 00:08:51,760
‫caso, ovviamente, non vogliamo crittografare di nuovo la password, giusto?

186
00:08:51,760 --> 00:08:54,420
‫E così possiamo farlo con Mongoose.

187
00:08:54,420 --> 00:08:58,130
‫E quindi diremo, se e poi questo, che si

188
00:08:58,130 --> 00:09:00,840
‫riferisce al documento attuale, giusto?

189
00:09:00,840 --> 00:09:03,070
‫E così in questo caso, all'utente corrente

190
00:09:03,070 --> 00:09:04,583
‫e poi viene modificato.

191
00:09:06,690 --> 00:09:07,523
‫Bene?

192
00:09:07,523 --> 00:09:10,670
‫Quindi abbiamo un metodo su tutti i documenti che possiamo

193
00:09:10,670 --> 00:09:13,260
‫usare se un determinato campo è stato modificato.

194
00:09:13,260 --> 00:09:16,270
‫E quindi qui, dobbiamo passare nel nome del campo,

195
00:09:16,270 --> 00:09:18,773
‫quindi "password. " Bene?

196
00:09:18,773 --> 00:09:21,080
‫E quindi fondamentalmente, quello che vogliamo fare

197
00:09:21,080 --> 00:09:24,440
‫qui è dire che se la password non è stata

198
00:09:24,440 --> 00:09:27,540
‫modificata, quindi no, allora in quel caso, torniamo semplicemente da

199
00:09:27,540 --> 00:09:30,520
‫questa funzione e non eseguiamo nessuno degli altri codici

200
00:09:30,520 --> 00:09:32,320
‫che sono qui e quindi

201
00:09:33,160 --> 00:09:34,863
‫chiamiamo il prossimo middleware.

202
00:09:35,834 --> 00:09:36,667
‫Bene?

203
00:09:37,930 --> 00:09:41,170
‫Quindi, di nuovo, se la password non è stata modificata,

204
00:09:41,170 --> 00:09:42,810
‫usciamo da questa funzione

205
00:09:42,810 --> 00:09:44,600
‫e chiamiamo il prossimo middleware.

206
00:09:44,600 --> 00:09:46,770
‫Altrimenti eseguiremo il codice

207
00:09:46,770 --> 00:09:48,580
‫che inserirò qui.

208
00:09:48,580 --> 00:09:51,270
‫E quindi ora è finalmente giunto il momento

209
00:09:51,270 --> 00:09:55,200
‫di crittografare effettivamente o, come possiamo anche dire, di eseguire l'hash della password, ok?

210
00:09:55,200 --> 00:09:58,490
‫Quindi vedrai il termine "hash" o "hashing" tutto

211
00:09:58,490 --> 00:10:01,890
‫il tempo e quindi in pratica significa anche crittografia, ok?

212
00:10:01,890 --> 00:10:05,440
‫Ora faremo questa crittografia, o hashing, usando

213
00:10:05,440 --> 00:10:08,580
‫un algoritmo di hashing molto

214
00:10:08,580 --> 00:10:13,230
‫noto e ben studiato e molto popolare chiamato bcrypt.

215
00:10:13,230 --> 00:10:14,290
‫Bene?

216
00:10:14,290 --> 00:10:18,200
‫Quindi questo algoritmo prima salterà e poi eseguirà l'hashing della

217
00:10:18,200 --> 00:10:21,130
‫nostra password per renderla davvero forte per proteggerla

218
00:10:21,130 --> 00:10:23,760
‫dagli attacchi di forza bruta, ok?

219
00:10:23,760 --> 00:10:25,280
‫E quindi questa è l'intera

220
00:10:25,280 --> 00:10:27,600
‫ragione per cui la crittografia deve essere davvero forte.

221
00:10:27,600 --> 00:10:30,360
‫Perché gli attacchi di forza bruta potrebbero

222
00:10:30,360 --> 00:10:34,040
‫provare a indovinare una certa password se non è molto crittografata.

223
00:10:34,040 --> 00:10:37,990
‫E ricorda come ho detto che bcrypt salirà la nostra password

224
00:10:37,990 --> 00:10:40,950
‫e questo significa solo che aggiungerà una stringa

225
00:10:40,950 --> 00:10:44,500
‫casuale alla password in modo che due password uguali

226
00:10:44,500 --> 00:10:47,430
‫non generino lo stesso hash, ok?

227
00:10:47,430 --> 00:10:48,490
‫Ha senso?

228
00:10:48,490 --> 00:10:51,520
‫Ora non entrerò nei dettagli crittografici su come funziona

229
00:10:51,520 --> 00:10:53,940
‫davvero dietro le quinte e perché

230
00:10:53,940 --> 00:10:56,850
‫abbiamo bisogno di un sistema così complesso, ok?

231
00:10:56,850 --> 00:11:00,140
‫Ma ovviamente puoi leggere tutto quello che vuoi su bcrypt online.

232
00:11:00,140 --> 00:11:02,830
‫C'è davvero un sacco di cose interessanti

233
00:11:02,830 --> 00:11:05,290
‫da scoprire lì, va bene?

234
00:11:05,290 --> 00:11:09,270
‫Ad ogni modo, ora andiamo avanti e utilizziamo il pacchetto

235
00:11:09,270 --> 00:11:12,133
‫bcrypt js per utilizzare questo algoritmo.

236
00:11:13,790 --> 00:11:14,623
‫Quindi, quindi

237
00:11:15,560 --> 00:11:16,393
‫npm installa

238
00:11:16,393 --> 00:11:17,660
‫quindi npm installa

239
00:11:19,156 --> 00:11:21,655
‫bcryptjs.

240
00:11:21,655 --> 00:11:22,488
‫Bene?

241
00:11:22,488 --> 00:11:25,410
‫E quindi questa è fondamentalmente un'implementazione bcrypt

242
00:11:25,410 --> 00:11:26,713
‫per Javascript.

243
00:11:27,650 --> 00:11:28,750
‫Bene?

244
00:11:28,750 --> 00:11:30,720
‫Torniamo al nostro terminale principale e poi

245
00:11:32,550 --> 00:11:34,513
‫andiamo avanti e importiamolo qui.

246
00:11:36,092 --> 00:11:40,820
‫E questo per impostazione predefinita è chiamato solo bcrypt, ok?

247
00:11:40,820 --> 00:11:41,873
‫E non bcryptjs.

248
00:11:42,889 --> 00:11:45,889
‫(clic sulla tastiera) Va

249
00:11:49,330 --> 00:11:50,163
‫bene.

250
00:11:53,360 --> 00:11:54,193
‫Tutto bene.

251
00:11:54,193 --> 00:11:56,033
‫E ora, usiamolo davvero.

252
00:11:56,970 --> 00:12:00,293
‫Quindi, vogliamo dire che questa password punto, quindi la

253
00:12:01,370 --> 00:12:03,510
‫password corrente in questo documento dovrebbe

254
00:12:04,590 --> 00:12:07,381
‫essere uguale a bcrypt dot hash dovrebbe essere

255
00:12:07,381 --> 00:12:10,214
‫uguale a bcrypt dot hash e quindi la

256
00:12:11,600 --> 00:12:13,100
‫nostra password corrente.

257
00:12:14,640 --> 00:12:15,473
‫Bene?

258
00:12:15,473 --> 00:12:19,600
‫E poi qui dobbiamo specificare un parametro di costo, ok?

259
00:12:19,600 --> 00:12:22,100
‫E potremmo effettivamente farlo in due modi.

260
00:12:22,100 --> 00:12:25,700
‫Quindi il primo modo sarà generare manualmente il sale, quindi

261
00:12:25,700 --> 00:12:27,740
‫quella stringa casuale in pratica, che

262
00:12:27,740 --> 00:12:29,727
‫verrà aggiunta alla nostra

263
00:12:29,727 --> 00:12:33,770
‫password e quindi utilizzerà quel sale qui in questa funzione di hash.

264
00:12:33,770 --> 00:12:34,603
‫Tutto ok?

265
00:12:34,603 --> 00:12:36,480
‫Ma invece, per rendere le cose un

266
00:12:36,480 --> 00:12:39,260
‫po' più semplici, possiamo anche semplicemente passare un parametro di costo

267
00:12:39,260 --> 00:12:40,620
‫in questa funzione qui.

268
00:12:40,620 --> 00:12:42,920
‫E quindi questa è fondamentalmente

269
00:12:42,920 --> 00:12:47,360
‫una misura di quanto intensiva la CPU sarà questa operazione, ok?

270
00:12:47,360 --> 00:12:50,230
‫E il valore predefinito qui credo sia 10, ma

271
00:12:50,230 --> 00:12:53,130
‫in questo momento è un po' meglio usare 12

272
00:12:53,130 --> 00:12:55,810
‫perché i computer sono diventati sempre più potenti.

273
00:12:55,810 --> 00:12:58,800
‫Quindi, come 20 anni fa, avresti potuto usare otto qui e

274
00:12:58,800 --> 00:13:01,170
‫poi un po' più tardi di 10,

275
00:13:01,170 --> 00:13:04,670
‫ma in questo momento a questo punto nel tempo, è meglio usare 12.

276
00:13:04,670 --> 00:13:06,610
‫Quindi più alto è questo

277
00:13:06,610 --> 00:13:09,610
‫costo qui, fondamentalmente più intenso sarà il processo

278
00:13:09,610 --> 00:13:13,350
‫per la CPU e migliore sarà la crittografia della password, ok?

279
00:13:13,350 --> 00:13:15,070
‫E ovviamente potremmo andare ancora più

280
00:13:15,070 --> 00:13:17,750
‫in alto, ma allora ci vorrebbe troppo tempo, va bene?

281
00:13:17,750 --> 00:13:20,330
‫E te lo mostrerò in un secondo.

282
00:13:20,330 --> 00:13:21,163
‫Bene?

283
00:13:21,163 --> 00:13:22,910
‫Ma per ora,

284
00:13:22,910 --> 00:13:26,060
‫finiamola perché c'è ancora una cosa qui.

285
00:13:26,060 --> 00:13:29,040
‫Quindi questo hash qui è in realtà la versione

286
00:13:29,040 --> 00:13:31,440
‫asincrona, ma esiste anche una versione sincrona.

287
00:13:31,440 --> 00:13:33,960
‫Ma come già saprai, non vogliamo utilizzare

288
00:13:33,960 --> 00:13:35,313
‫la versione sincrona

289
00:13:35,313 --> 00:13:38,810
‫perché bloccherà il ciclo degli eventi e quindi impedirà ad

290
00:13:38,810 --> 00:13:41,000
‫altri utenti di utilizzare l'applicazione.

291
00:13:41,000 --> 00:13:43,350
‫Quindi, proprio come abbiamo imparato all'inizio.

292
00:13:43,350 --> 00:13:45,230
‫E quindi ovviamente vogliamo

293
00:13:45,230 --> 00:13:48,130
‫usare la versione asincrona che è questa.

294
00:13:48,130 --> 00:13:50,210
‫E questo restituirà quindi

295
00:13:50,210 --> 00:13:53,860
‫una promessa e quella promessa, ovviamente, dobbiamo aspettare.

296
00:13:53,860 --> 00:13:58,860
‫Quindi, dobbiamo usare wait e poi dire che questa funzione

297
00:13:58,960 --> 00:14:02,513
‫è una funzione asincrona, proprio come questa.

298
00:14:04,730 --> 00:14:06,860
‫Quindi, ricapitoliamo qui.

299
00:14:06,860 --> 00:14:09,780
‫Quindi, vogliamo impostare la nostra password corrente

300
00:14:09,780 --> 00:14:14,780
‫fondamentalmente per crittografare questa versione della password originale con un costo di

301
00:14:14,780 --> 00:14:17,500
‫12, per non rendere troppo

302
00:14:17,500 --> 00:14:21,690
‫facile l'infrazione della password, ma anche per non far impiegare

303
00:14:21,690 --> 00:14:25,423
‫troppo tempo all'applicazione per crittografare la password, Tutto ok?

304
00:14:25,423 --> 00:14:27,920
‫Quindi, con questo, abbiamo crittografato la nostra

305
00:14:27,920 --> 00:14:30,070
‫password e ora, alla fine, ciò

306
00:14:30,070 --> 00:14:33,840
‫che dobbiamo fare è sostanzialmente eliminare la password di conferma, ok?

307
00:14:33,840 --> 00:14:35,670
‫Perché in questo momento,

308
00:14:35,670 --> 00:14:38,663
‫abbiamo solo la vera password hash, giusto?

309
00:14:40,560 --> 00:14:42,489
‫Quindi, questa password del punto

310
00:14:42,489 --> 00:14:43,643
‫conferma, quindi,

311
00:14:43,643 --> 00:14:45,980
‫questa password del punto conferma, e come

312
00:14:45,980 --> 00:14:48,740
‫in pratica eliminiamo il campo, quindi non essere

313
00:14:48,740 --> 00:14:51,440
‫persistente nel database è impostarlo su undefined.

314
00:14:51,440 --> 00:14:52,400
‫Tutto ok?

315
00:14:52,400 --> 00:14:55,970
‫Quindi, abbiamo davvero solo bisogno di questa password confermata qui

316
00:14:55,970 --> 00:14:58,950
‫per la convalida che abbiamo implementato prima.

317
00:14:58,950 --> 00:15:00,730
‫Quindi, solo per assicurarsi che

318
00:15:00,730 --> 00:15:03,160
‫l'utente abbia effettivamente inserito due password uguali

319
00:15:03,160 --> 00:15:06,660
‫in modo da non commettere errori con la sua password.

320
00:15:06,660 --> 00:15:07,590
‫Destra?

321
00:15:07,590 --> 00:15:10,300
‫Quindi, dopo che questa convalida ha

322
00:15:10,300 --> 00:15:13,060
‫avuto successo, in realtà non abbiamo più bisogno

323
00:15:13,060 --> 00:15:16,710
‫di questo campo, quindi non vogliamo davvero mantenerlo nel database.

324
00:15:16,710 --> 00:15:20,130
‫Ed è per questo che l'abbiamo semplicemente impostato qui su undefined.

325
00:15:20,130 --> 00:15:21,150
‫Tutto ok?

326
00:15:21,150 --> 00:15:23,220
‫Ora potresti chiederti perché funziona perché

327
00:15:23,220 --> 00:15:25,920
‫in realtà impostiamo la conferma della password su

328
00:15:25,920 --> 00:15:27,800
‫un valore richiesto, giusto?

329
00:15:27,800 --> 00:15:30,750
‫Ma questo significa semplicemente che è un input richiesto,

330
00:15:30,750 --> 00:15:33,650
‫non che è necessario che venga effettivamente mantenuto

331
00:15:33,650 --> 00:15:35,149
‫nel database, ok?

332
00:15:35,149 --> 00:15:36,982
‫al database, ok?

333
00:15:38,393 --> 00:15:42,390
‫Ora, solo per finire, dobbiamo ovviamente chiamare anche il prossimo.

334
00:15:42,390 --> 00:15:43,240
‫Bene?

335
00:15:43,240 --> 00:15:44,290
‫Diamo un salvataggio.

336
00:15:45,640 --> 00:15:47,440
‫E in realtà aggiungerò alcuni commenti

337
00:15:47,440 --> 00:15:49,370
‫qui per renderlo davvero chiaro per te.

338
00:15:49,370 --> 00:15:52,400
‫Quindi, in pratica, ciò che fa è eseguire questa

339
00:15:54,180 --> 00:15:55,050
‫funzione

340
00:15:56,160 --> 00:15:57,190
‫solo se la

341
00:15:58,930 --> 00:16:00,533
‫password è stata effettivamente modificata.

342
00:16:05,070 --> 00:16:05,903
‫Quindi qui,

343
00:16:08,840 --> 00:16:11,803
‫hash la password con un costo di 12.

344
00:16:14,785 --> 00:16:16,300
‫E poi,

345
00:16:16,300 --> 00:16:19,443
‫elimina il campo di conferma della password.

346
00:16:20,750 --> 00:16:21,583
‫Bene.

347
00:16:21,583 --> 00:16:24,453
‫E ora, andiamo avanti e testiamo questo.

348
00:16:25,660 --> 00:16:29,590
‫E ora creerò un nuovo utente con esattamente questi dati

349
00:16:29,590 --> 00:16:32,470
‫e ora diamo un'occhiata al risultato.

350
00:16:32,470 --> 00:16:36,460
‫E infatti, ora otteniamo questa password dall'aspetto molto strano che

351
00:16:36,460 --> 00:16:40,163
‫in effetti è la versione crittografata di pass1234.

352
00:16:41,410 --> 00:16:45,580
‫E inoltre, come vedi, la conferma della password non è più qui.

353
00:16:45,580 --> 00:16:46,413
‫Bene?

354
00:16:46,413 --> 00:16:48,930
‫E così, proprio così, ora abbiamo archiviato gli

355
00:16:48,930 --> 00:16:51,353
‫utenti in modo sicuro nel nostro database.

356
00:16:52,280 --> 00:16:55,310
‫Lascia che ora ti mostri come funzionerà se,

357
00:16:55,310 --> 00:16:58,233
‫ad esempio, lo impostiamo su 16 qui.

358
00:17:00,740 --> 00:17:02,540
‫E ho bisogno di cambiare l'e-mail qui.

359
00:17:03,540 --> 00:17:07,120
‫E quindi ora dovrebbe volerci molto tempo e non

360
00:17:07,120 --> 00:17:09,180
‫sono sicuro di poter aspettare.

361
00:17:09,180 --> 00:17:12,490
‫Oh, in realtà ci sono voluti circa quattro secondi e mezzo.

362
00:17:12,490 --> 00:17:17,320
‫Ma è ancora un po' troppo credo, ok?

363
00:17:17,320 --> 00:17:18,980
‫Quindi, riportiamolo a

364
00:17:18,980 --> 00:17:20,330
‫12

365
00:17:21,410 --> 00:17:24,507
‫e dovrebbe andare meglio, ok?

366
00:17:24,507 --> 00:17:26,670
‫E ora, di nuovo,

367
00:17:26,670 --> 00:17:29,630
‫cancelliamo questi utenti che abbiamo appena creato.

368
00:17:29,630 --> 00:17:32,110
‫E in realtà ho bisogno di sbarazzarmi

369
00:17:32,110 --> 00:17:36,000
‫di questo primo perché questo ha ancora la password in chiaro.

370
00:17:36,000 --> 00:17:38,090
‫E quindi questo utente non

371
00:17:38,090 --> 00:17:40,370
‫funzionerà quando inizieremo ad accedere effettivamente agli

372
00:17:40,370 --> 00:17:42,621
‫utenti in base alla loro password.

373
00:17:42,621 --> 00:17:44,250
‫Bene?

374
00:17:44,250 --> 00:17:45,743
‫Quindi liberiamoci di questo.

375
00:17:52,780 --> 00:17:54,060
‫Bene?

376
00:17:54,060 --> 00:17:56,170
‫E anche quello che volevo mostrarti

377
00:17:57,510 --> 00:17:59,880
‫qui è che abbiamo inserito la stessa identica

378
00:17:59,880 --> 00:18:02,390
‫password per questi due utenti che abbiamo creato, giusto?

379
00:18:02,390 --> 00:18:04,520
‫Ma vedi che la

380
00:18:04,520 --> 00:18:07,630
‫password crittografata è in realtà molto diversa, giusto?

381
00:18:07,630 --> 00:18:09,820
‫E quindi questo è il potere di salare la

382
00:18:09,820 --> 00:18:11,043
‫password prima di eseguirne l'hashing.

383
00:18:12,220 --> 00:18:13,060
‫Tutto ok?

384
00:18:13,060 --> 00:18:17,250
‫Quindi, proprio in questo modo, abbiamo, ancora una volta, implementato una gestione delle

385
00:18:17,250 --> 00:18:19,313
‫password molto sicura e buona.

