﻿1
00:00:00,960 --> 00:00:02,570
‫Istruttore: Quindi, ora

2
00:00:02,570 --> 00:00:06,600
‫dobbiamo inviare il token di reimpostazione della password via e-mail all'utente.

3
00:00:06,600 --> 00:00:08,860
‫E quindi in questa lezione

4
00:00:08,860 --> 00:00:12,140
‫impareremo come inviare e-mail utilizzando una soluzione molto

5
00:00:12,140 --> 00:00:13,630
‫popolare chiamata Nodemailer.

6
00:00:15,154 --> 00:00:17,600
‫Ma prima di farlo, in realtà

7
00:00:17,600 --> 00:00:20,840
‫volevo mostrarti l'effetto di non avere questa opzione qui, perché

8
00:00:20,840 --> 00:00:23,540
‫in realtà non te l'ho mai mostrato prima.

9
00:00:23,540 --> 00:00:26,543
‫Quindi tagliamo qui, provalo ora, di nuovo, e ora

10
00:00:28,910 --> 00:00:31,720
‫vedi tutti questi errori che compaiono come per

11
00:00:31,720 --> 00:00:33,890
‫favore conferma la tua password.

12
00:00:33,890 --> 00:00:36,010
‫E, in realtà, dovrebbero essercene di

13
00:00:36,010 --> 00:00:39,340
‫più, ma, beh, questo è ora il primo che ottieni.

14
00:00:39,340 --> 00:00:41,400
‫Fondamentalmente, perché non abbiamo alcun

15
00:00:41,400 --> 00:00:43,650
‫valore nel campo di conferma della password.

16
00:00:43,650 --> 00:00:44,483
‫Va bene?

17
00:00:44,483 --> 00:00:46,600
‫E così di nuovo, è a causa

18
00:00:46,600 --> 00:00:49,330
‫della convalida e quindi di nuovo possiamo, ovviamente, disattivarlo

19
00:00:49,330 --> 00:00:51,083
‫facilmente con questa opzione.

20
00:00:53,430 --> 00:00:56,600
‫Ma comunque, ora creiamo una funzione di gestione della posta elettronica

21
00:00:56,600 --> 00:00:59,580
‫che possiamo quindi utilizzare in tutta la nostra applicazione.

22
00:00:59,580 --> 00:01:00,860
‫Quindi lo farò

23
00:01:00,860 --> 00:01:02,673
‫proprio qui nella cartella Utilità,

24
00:01:04,210 --> 00:01:08,440
‫di nuovo, e lo chiamerò semplicemente e-mail. js.

25
00:01:08,440 --> 00:01:09,650
‫Va bene?

26
00:01:09,650 --> 00:01:11,410
‫E prima di fare

27
00:01:11,410 --> 00:01:14,240
‫qualsiasi altra cosa, installiamo effettivamente il pacchetto Nodemailer.

28
00:01:14,240 --> 00:01:16,120
‫Quindi questo è il pacchetto che ho

29
00:01:16,120 --> 00:01:17,390
‫menzionato all'inizio, che

30
00:01:17,390 --> 00:01:20,723
‫useremo per inviare e-mail utilizzando Node. js.

31
00:01:23,130 --> 00:01:27,620
‫Quindi, come sempre, npm installa nodemailer.

32
00:01:34,170 --> 00:01:35,123
‫E qui dentro.

33
00:01:42,674 --> 00:01:46,423
‫Va bene, e ora creiamo quella funzione qui.

34
00:01:49,500 --> 00:01:51,113
‫Quindi e-mail costanti,

35
00:01:52,880 --> 00:01:54,350
‫ok, e

36
00:01:54,350 --> 00:01:58,060
‫poi qui, in pratica, passeremo alcune opzioni.

37
00:01:58,060 --> 00:02:01,090
‫Quindi l'indirizzo e-mail a cui vogliamo inviare un'e-mail,

38
00:02:01,090 --> 00:02:03,780
‫la riga dell'oggetto, il contenuto dell'e-mail

39
00:02:03,780 --> 00:02:05,803
‫e forse altre cose.

40
00:02:07,625 --> 00:02:08,780
‫Va bene.

41
00:02:08,780 --> 00:02:11,180
‫E quindi ora dobbiamo seguire

42
00:02:11,180 --> 00:02:13,950
‫tre passaggi per inviare e-mail con Nodemailer.

43
00:02:15,120 --> 00:02:18,783
‫Quindi, per prima cosa, dobbiamo creare un trasportatore.

44
00:02:23,950 --> 00:02:24,963
‫Quindi,

45
00:02:27,340 --> 00:02:31,777
‫in secondo luogo, dobbiamo definire le opzioni di posta

46
00:02:35,330 --> 00:02:36,373
‫elettronica, in pratica,

47
00:02:37,930 --> 00:02:41,820
‫e alla fine, inviare effettivamente l'e-mail con Nodemailer.

48
00:02:41,820 --> 00:02:42,960
‫Va bene?

49
00:02:42,960 --> 00:02:46,260
‫Quindi, il trasportatore che abbiamo realizzato nel primo

50
00:02:46,260 --> 00:02:50,790
‫passaggio qui, è fondamentalmente un servizio che invierà effettivamente l'e-mail, perché non

51
00:02:50,790 --> 00:02:53,610
‫è un nodo. js che

52
00:02:53,610 --> 00:02:55,220
‫invierà effettivamente l'e-mail stessa.

53
00:02:55,220 --> 00:02:57,720
‫È solo un servizio che definiamo qui.

54
00:02:57,720 --> 00:03:00,340
‫Qualcosa come Gmail, per esempio.

55
00:03:00,340 --> 00:03:02,270
‫Ora, Gmail non è in realtà

56
00:03:02,270 --> 00:03:03,370
‫il servizio

57
00:03:03,370 --> 00:03:05,760
‫che useremo, ma lascia che ti mostri

58
00:03:05,760 --> 00:03:08,350
‫rapidamente come funziona con Gmail, perché so che

59
00:03:08,350 --> 00:03:10,810
‫molte persone saranno interessate a questo, ok?

60
00:03:10,810 --> 00:03:15,120
‫Quindi, comunque, dobbiamo sempre creare un trasportatore, ed è sempre

61
00:03:15,120 --> 00:03:16,260
‫lo stesso,

62
00:03:16,260 --> 00:03:18,210
‫non importa quale servizio useremo.

63
00:03:20,070 --> 00:03:22,410
‫Quindi il trasportatore sarà

64
00:03:22,410 --> 00:03:24,577
‫nodemailer. createTransport e

65
00:03:28,660 --> 00:03:31,550
‫poi, ovviamente, abbiamo bisogno di alcune opzioni.

66
00:03:31,550 --> 00:03:32,920
‫Va bene?

67
00:03:32,920 --> 00:03:35,820
‫Quindi possiamo specificare il servizio e possiamo

68
00:03:37,620 --> 00:03:40,360
‫dire che vogliamo usare Gmail.

69
00:03:40,360 --> 00:03:42,110
‫Quindi, proprio così.

70
00:03:42,110 --> 00:03:44,530
‫E ci sono un paio

71
00:03:44,530 --> 00:03:47,260
‫di servizi ben noti che Nodemailer sa

72
00:03:47,260 --> 00:03:49,870
‫come gestire, quindi non dobbiamo configurarli manualmente.

73
00:03:49,870 --> 00:03:52,660
‫E quindi Gmail è solo uno di questi.

74
00:03:52,660 --> 00:03:56,863
‫Ma c'è anche Yahoo, o Hotmail, o molti altri, ok?

75
00:03:57,760 --> 00:03:58,980
‫Quindi questo

76
00:03:58,980 --> 00:04:03,020
‫è il servizio, e poi dobbiamo anche specificare la proprietà

77
00:04:03,020 --> 00:04:04,783
‫auth, quindi fondamentalmente per l'autenticazione.

78
00:04:06,150 --> 00:04:08,730
‫Quindi abbiamo bisogno di un utente e una password.

79
00:04:08,730 --> 00:04:10,380
‫E così, proprio come prima,

80
00:04:10,380 --> 00:04:14,253
‫salviamo quel tipo di cose nella nostra configurazione. n file.

81
00:04:15,840 --> 00:04:16,673
‫Va bene.

82
00:04:17,930 --> 00:04:18,963
‫Quindi email,

83
00:04:21,090 --> 00:04:22,253
‫questo è un

84
00:04:23,500 --> 00:04:26,700
‫nome utente, e ora non userò un vero

85
00:04:26,700 --> 00:04:28,963
‫indirizzo Gmail qui perché, di nuovo,

86
00:04:29,910 --> 00:04:34,140
‫non stiamo usando Gmail, ma solo come esempio qui, va bene.

87
00:04:34,140 --> 00:04:36,910
‫La tua password.

88
00:04:36,910 --> 00:04:38,350
‫Va bene.

89
00:04:38,350 --> 00:04:40,480
‫Quindi qui abbiamo finito, diciamo,

90
00:04:40,480 --> 00:04:41,350
‫processo

91
00:04:43,090 --> 00:04:44,830
‫punto fine punto

92
00:04:47,414 --> 00:04:48,581
‫EMAIL_USERNAME il

93
00:04:53,780 --> 00:04:56,113
‫processo password punto fine punto

94
00:04:58,310 --> 00:04:59,800
‫EMAIL_PASSWORD e spero

95
00:05:02,650 --> 00:05:04,723
‫di averli digitati correttamente.

96
00:05:05,580 --> 00:05:06,413
‫Va bene?

97
00:05:06,413 --> 00:05:07,970
‫E quindi questa è

98
00:05:07,970 --> 00:05:10,610
‫la configurazione per il trasporto in Nodemailer.

99
00:05:10,610 --> 00:05:12,400
‫Quindi nel tuo account

100
00:05:12,400 --> 00:05:14,160
‫Gmail, dovrai effettivamente

101
00:05:14,160 --> 00:05:17,346
‫attivare qualcosa chiamato l'opzione dell'app meno sicura.

102
00:05:17,346 --> 00:05:18,896
‫Quindi lascia che lo scriva qui.

103
00:05:27,609 --> 00:05:29,640
‫E ancora, non lo farò

104
00:05:29,640 --> 00:05:31,020
‫qui, ma so

105
00:05:31,020 --> 00:05:33,160
‫che molte persone vorranno davvero usarlo.

106
00:05:33,160 --> 00:05:35,710
‫E il motivo per cui non utilizziamo Gmail

107
00:05:35,710 --> 00:05:37,200
‫in questa applicazione è

108
00:05:37,200 --> 00:05:40,170
‫perché Gmail non è affatto una buona idea per

109
00:05:40,170 --> 00:05:41,510
‫un'app di produzione.

110
00:05:41,510 --> 00:05:44,170
‫E quindi questo è fondamentalmente ciò che stiamo cercando di costruire qui.

111
00:05:44,170 --> 00:05:45,003
‫Va bene?

112
00:05:45,003 --> 00:05:47,600
‫Quindi, usando Gmail per questo tipo

113
00:05:47,600 --> 00:05:50,670
‫di cose, puoi inviare solo 500 e-mail al

114
00:05:50,670 --> 00:05:53,520
‫giorno e, inoltre, verrai probabilmente contrassegnato molto

115
00:05:53,520 --> 00:05:57,410
‫rapidamente come spammer e, da lì, andrà solo in discesa.

116
00:05:57,410 --> 00:05:58,330
‫Va bene?

117
00:05:58,330 --> 00:06:00,710
‫Quindi, a meno che non sia come un'app

118
00:06:00,710 --> 00:06:02,780
‫privata e non invii e-mail a te

119
00:06:02,780 --> 00:06:04,470
‫stesso o, ad esempio,

120
00:06:04,470 --> 00:06:07,090
‫10 amici, beh, allora dovresti usare un altro servizio.

121
00:06:07,090 --> 00:06:10,680
‫E alcuni noti sono SendGrid e Mailgun.

122
00:06:10,680 --> 00:06:13,740
‫E, in realtà, useremo SendGrid un po' più avanti

123
00:06:13,740 --> 00:06:15,180
‫in questo corso.

124
00:06:15,180 --> 00:06:17,400
‫Ora, quello che faremo adesso

125
00:06:17,400 --> 00:06:19,920
‫è usare uno speciale servizio di sviluppo,

126
00:06:19,920 --> 00:06:23,740
‫che fondamentalmente fa finta di inviare email a indirizzi reali.

127
00:06:23,740 --> 00:06:26,660
‫Ma, in realtà, queste e-mail finiscono intrappolate in una casella

128
00:06:26,660 --> 00:06:29,920
‫di posta di sviluppo, in modo che possiamo quindi dare un'occhiata

129
00:06:29,920 --> 00:06:32,320
‫a come appariranno in seguito nella produzione.

130
00:06:32,320 --> 00:06:33,270
‫Va bene?

131
00:06:33,270 --> 00:06:35,700
‫Quindi quel servizio si chiama

132
00:06:35,700 --> 00:06:37,893
‫Mailtrap, quindi ora iscriviamoci.

133
00:06:41,190 --> 00:06:42,023
‫Così.

134
00:06:43,500 --> 00:06:45,883
‫Trappola. io, va

135
00:06:47,810 --> 00:06:48,643
‫bene?

136
00:06:48,643 --> 00:06:51,050
‫Quindi, e come ho detto, test di posta elettronica sicuri per

137
00:06:51,050 --> 00:06:52,940
‫la messa in scena e lo sviluppo.

138
00:06:52,940 --> 00:06:54,280
‫Quindi, in pratica,

139
00:06:54,280 --> 00:06:57,410
‫con questo servizio, puoi fingere di inviare e-mail ai

140
00:06:57,410 --> 00:07:00,230
‫client, ma queste e-mail non raggiungeranno mai

141
00:07:00,230 --> 00:07:03,670
‫questi client e verranno invece intrappolate nel tuo Mailtrap, ok?

142
00:07:03,670 --> 00:07:05,660
‫E in questo modo

143
00:07:05,660 --> 00:07:09,150
‫non puoi inviare accidentalmente alcune e-mail di sviluppo a

144
00:07:09,150 --> 00:07:11,540
‫tutti i tuoi clienti o utenti, ok.

145
00:07:11,540 --> 00:07:13,450
‫Quindi vai avanti e iscriviti ora.

146
00:07:13,450 --> 00:07:15,430
‫Io, ovviamente, ho già il mio account,

147
00:07:15,430 --> 00:07:17,040
‫quindi ora effettuerò semplicemente l'accesso.

148
00:07:17,040 --> 00:07:19,390
‫Quindi ci vediamo tra un secondo, dopo

149
00:07:19,390 --> 00:07:21,600
‫aver creato il tuo account gratuito.

150
00:07:21,600 --> 00:07:24,350
‫Va bene, quindi dopo aver creato il

151
00:07:24,350 --> 00:07:27,290
‫tuo account, probabilmente assomiglierà un po' a questo.

152
00:07:27,290 --> 00:07:29,630
‫Ora, non avrai alcuna casella di posta per

153
00:07:29,630 --> 00:07:31,810
‫ora, quindi creiamone una nuova, con il

154
00:07:31,810 --> 00:07:32,970
‫nome di natours.

155
00:07:32,970 --> 00:07:36,200
‫Quindi, ne ho già uno, ma creane uno nuovo qui, con

156
00:07:36,200 --> 00:07:39,260
‫il nome natours, e poi premi Crea posta in arrivo.

157
00:07:39,260 --> 00:07:40,093
‫Va bene?

158
00:07:40,093 --> 00:07:41,520
‫Quindi possiamo aprirlo

159
00:07:41,520 --> 00:07:44,280
‫e vedi che non abbiamo email a questo

160
00:07:44,280 --> 00:07:45,950
‫punto, ma ciò che conta

161
00:07:45,950 --> 00:07:48,170
‫per ora sono queste credenziali qui.

162
00:07:48,170 --> 00:07:50,310
‫Quindi vedi che abbiamo il nostro host

163
00:07:50,310 --> 00:07:53,120
‫qui, abbiamo la porta, il nome utente e la password.

164
00:07:53,120 --> 00:07:54,990
‫E quindi è quello che

165
00:07:54,990 --> 00:07:57,580
‫specificheremo ora nel nostro trasporto in Nodemailer.

166
00:07:57,580 --> 00:07:58,413
‫Va bene?

167
00:07:58,413 --> 00:08:00,810
‫Quindi iniziamo con l'host, beh, in realtà,

168
00:08:00,810 --> 00:08:02,060
‫con il nome

169
00:08:02,060 --> 00:08:04,320
‫utente, quindi questi due, devo solo

170
00:08:04,320 --> 00:08:07,933
‫copiarli, quindi copiamolo nel nostro file di configurazione, quindi questo

171
00:08:09,100 --> 00:08:11,323
‫è il nome utente, quindi questa

172
00:08:13,220 --> 00:08:14,723
‫è la password, e

173
00:08:18,620 --> 00:08:21,813
‫ora in realtà abbiamo anche bisogno di specificare l'ospite.

174
00:08:28,580 --> 00:08:31,830
‫Ok, e questo perché Mailtrap non è

175
00:08:31,830 --> 00:08:35,493
‫uno di questi servizi predefiniti forniti con Nodemailer.

176
00:08:39,720 --> 00:08:40,553
‫Va bene.

177
00:08:44,800 --> 00:08:46,433
‫Il porto è 25.

178
00:08:47,780 --> 00:08:49,660
‫Quindi salvalo, e poi

179
00:08:49,660 --> 00:08:53,390
‫qui dentro, liberiamoci di questo, e quello

180
00:08:53,390 --> 00:08:56,690
‫che devo specificare invece è l'host,

181
00:08:57,730 --> 00:08:58,803
‫quindi

182
00:09:00,040 --> 00:09:01,460
‫e-mail, host

183
00:09:01,460 --> 00:09:03,430
‫e, naturalmente, la porta.

184
00:09:03,430 --> 00:09:05,773
‫Quindi tutto ciò che abbiamo appena salvato prima.

185
00:09:10,800 --> 00:09:12,950
‫Va bene, allora l'autenticazione qui è

186
00:09:12,950 --> 00:09:14,323
‫esattamente la stessa.

187
00:09:15,790 --> 00:09:17,643
‫Eliminiamo anche questo e

188
00:09:19,888 --> 00:09:22,200
‫passiamo al passaggio numero due.

189
00:09:22,200 --> 00:09:24,913
‫Quindi sostanzialmente definendo alcune opzioni per la nostra email.

190
00:09:29,440 --> 00:09:31,700
‫Va bene, e potremmo, ovviamente, fare

191
00:09:31,700 --> 00:09:34,320
‫il passaggio due e tre allo stesso

192
00:09:34,320 --> 00:09:36,970
‫tempo, ma preferisco semplicemente queste opzioni qui prima.

193
00:09:37,810 --> 00:09:39,910
‫Ok, quindi qui specifichiamo da

194
00:09:39,910 --> 00:09:41,603
‫dove proviene l'e-mail, quindi

195
00:09:42,660 --> 00:09:43,713
‫il nome

196
00:09:45,890 --> 00:09:48,963
‫e poi l'indirizzo e-mail in questo modo.

197
00:09:52,800 --> 00:09:55,453
‫Successivamente, abbiamo bisogno dell'indirizzo del

198
00:09:57,500 --> 00:10:01,153
‫destinatario, quindi quello lo specificherò come opzione,

199
00:10:03,200 --> 00:10:04,033
‫ok?

200
00:10:04,033 --> 00:10:06,560
‫Quindi fondamentalmente, arrivando come argomento a questa funzione.

201
00:10:06,560 --> 00:10:08,650
‫Quindi questo oggetto options

202
00:10:08,650 --> 00:10:11,173
‫qui, è questo che passiamo alla funzione.

203
00:10:12,110 --> 00:10:13,370
‫Va bene.

204
00:10:13,370 --> 00:10:17,263
‫Poi in realtà lo stesso per il soggetto e per il testo.

205
00:10:18,990 --> 00:10:20,593
‫Duplichiamo questi qui,

206
00:10:26,250 --> 00:10:28,170
‫quindi l'oggetto e poi

207
00:10:29,300 --> 00:10:31,720
‫specifichiamo solo la proprietà text, e

208
00:10:31,720 --> 00:10:34,793
‫quella, nelle opzioni, la chiamo solo messaggio.

209
00:10:35,790 --> 00:10:38,070
‫Va bene, quindi questa è fondamentalmente

210
00:10:38,070 --> 00:10:39,950
‫la versione testuale dell'e-mail.

211
00:10:39,950 --> 00:10:44,220
‫Ma possiamo anche specificare la proprietà HTML.

212
00:10:44,220 --> 00:10:48,220
‫Ok, quindi ora possiamo convertire questo messaggio in HTML.

213
00:10:48,220 --> 00:10:50,460
‫E più tardi, lo faremo, ma

214
00:10:50,460 --> 00:10:54,780
‫per ora, manteniamo le cose semplici e non specifichiamo affatto l'HTML qui.

215
00:10:54,780 --> 00:10:55,613
‫Va bene?

216
00:10:55,613 --> 00:10:57,993
‫Quindi semplicemente lasciandolo al testo.

217
00:10:59,320 --> 00:11:00,153
‫Va bene!

218
00:11:00,153 --> 00:11:01,773
‫E infine, alla

219
00:11:03,050 --> 00:11:06,723
‫fine, trasportatore, quindi questo è l'oggetto trasportatore che abbiamo

220
00:11:06,723 --> 00:11:09,440
‫creato proprio qui all'inizio, e su

221
00:11:09,440 --> 00:11:11,890
‫quello, possiamo quindi chiamare sendMail

222
00:11:14,470 --> 00:11:18,983
‫e in quello dobbiamo passare le nostre opzioni di posta, ok?

223
00:11:19,900 --> 00:11:22,640
‫E ora questo restituisce effettivamente una Promessa.

224
00:11:22,640 --> 00:11:25,890
‫Ok, di nuovo, questa è una funzione

225
00:11:25,890 --> 00:11:29,480
‫asincrona e poiché non vogliamo lavorare direttamente con

226
00:11:29,480 --> 00:11:30,933
‫Promises, usiamo async/await.

227
00:11:32,890 --> 00:11:33,723
‫Va bene.

228
00:11:34,770 --> 00:11:37,450
‫Quindi dichiarandolo come una funzione asincrona e

229
00:11:37,450 --> 00:11:39,023
‫il gioco è fatto.

230
00:11:40,030 --> 00:11:41,070
‫Va bene.

231
00:11:41,070 --> 00:11:43,250
‫Non vogliamo memorizzare alcun risultato qui,

232
00:11:43,250 --> 00:11:46,423
‫cosa che potremmo fare, ma non mi interessa molto.

233
00:11:47,940 --> 00:11:51,930
‫Ok, ora esportiamolo come predefinito da

234
00:11:51,930 --> 00:11:54,263
‫questo modulo.

235
00:11:57,990 --> 00:11:59,360
‫Ok, sembra buono!

236
00:11:59,360 --> 00:12:02,890
‫Ora andiamo avanti e proviamo effettivamente questo.

237
00:12:02,890 --> 00:12:07,050
‫E quindi, per iniziare, dobbiamo importarlo qui, ovviamente.

238
00:12:07,050 --> 00:12:09,003
‫Quindi duplichiamo questo qui,

239
00:12:13,270 --> 00:12:14,370
‫quindi

240
00:12:14,370 --> 00:12:19,163
‫questa è e-mail e la funzione si chiama sendEmail, credo.

241
00:12:21,573 --> 00:12:22,406
‫Va bene.

242
00:12:22,406 --> 00:12:26,513
‫Quindi torniamo alla nostra funzione middleware qui e

243
00:12:28,540 --> 00:12:31,397
‫iniziamo definendo l'URL di ripristino.

244
00:12:33,890 --> 00:12:37,810
‫Quindi, idealmente, l'utente farà clic su questa e-mail e sarà quindi

245
00:12:37,810 --> 00:12:41,240
‫in grado di eseguire la richiesta da lì.

246
00:12:41,240 --> 00:12:42,500
‫E funzionerà in

247
00:12:42,500 --> 00:12:44,650
‫seguito quando implementeremo il nostro sito

248
00:12:44,650 --> 00:12:48,170
‫Web dinamico, ma comunque ora vogliamo creare questo URL qui, in

249
00:12:48,170 --> 00:12:50,350
‫modo che l'utente possa semplicemente copiarlo,

250
00:12:50,350 --> 00:12:52,433
‫per rendere più semplice questa richiesta.

251
00:12:53,720 --> 00:12:56,130
‫Ok, quindi in pratica

252
00:12:57,350 --> 00:13:00,750
‫dobbiamo ricreare questa struttura URL che abbiamo qui.

253
00:13:00,750 --> 00:13:02,627
‫Quindi questo è per la password

254
00:13:02,627 --> 00:13:04,227
‫dimenticata e salviamolo qui.

255
00:13:10,670 --> 00:13:14,910
‫Quindi, ho dimenticato la password e ora l'URL che stiamo creando

256
00:13:14,910 --> 00:13:17,820
‫è in realtà per reimpostare la password.

257
00:13:17,820 --> 00:13:21,340
‫Quindi, ricorda, l'abbiamo effettivamente implementato prima.

258
00:13:21,340 --> 00:13:22,173
‫Va bene.

259
00:13:22,173 --> 00:13:24,020
‫Andiamo avanti e

260
00:13:27,760 --> 00:13:31,750
‫copiamolo qui, quindi reimposta la password, ok?

261
00:13:31,750 --> 00:13:33,940
‫E questo prenderà effettivamente il

262
00:13:33,940 --> 00:13:35,540
‫token come parametro.

263
00:13:35,540 --> 00:13:39,120
‫Ok, per ora inseriamo qui un qualsiasi token casuale.

264
00:13:39,120 --> 00:13:40,563
‫Quindi non importa affatto.

265
00:13:41,610 --> 00:13:42,860
‫Permettetemi

266
00:13:45,150 --> 00:13:50,150
‫di salvarlo qui, come reimpostazione della password.

267
00:13:50,360 --> 00:13:51,193
‫Va bene.

268
00:13:51,193 --> 00:13:53,970
‫Inoltre, non è GET, non è nemmeno

269
00:13:53,970 --> 00:13:56,320
‫POST, ma è PATCH, perché

270
00:13:56,320 --> 00:13:59,490
‫il risultato sarà la modifica della proprietà della

271
00:13:59,490 --> 00:14:01,560
‫password nel documento utente.

272
00:14:01,560 --> 00:14:05,470
‫E quindi PATCH è il migliore in realtà, ok?

273
00:14:05,470 --> 00:14:09,023
‫Quindi cambiamo rapidamente la nostra implementazione del percorso per questo.

274
00:14:10,720 --> 00:14:14,410
‫Quindi, è qui in userRoute, quindi non

275
00:14:14,410 --> 00:14:17,480
‫è POST, è PATCH

276
00:14:17,480 --> 00:14:20,710
‫e vogliamo anche specificare un parametro.

277
00:14:20,710 --> 00:14:22,330
‫Quindi, ricorda come lo facciamo.

278
00:14:22,330 --> 00:14:24,030
‫Quindi è proprio come quaggiù.

279
00:14:24,030 --> 00:14:26,960
‫Quindi un'altra barra, quindi due punti e quindi

280
00:14:26,960 --> 00:14:29,593
‫il nome del parametro, che sarà token.

281
00:14:31,390 --> 00:14:32,990
‫Ok, e costruiamolo

282
00:14:32,990 --> 00:14:34,870
‫ora, iniziando dal protocollo.

283
00:14:34,870 --> 00:14:38,340
‫Quindi, HTTP o HTTPS, ok?

284
00:14:38,340 --> 00:14:42,283
‫E fondamentalmente otterremo quei dati dalla nostra richiesta.

285
00:14:43,180 --> 00:14:45,720
‫Quindi questo viene memorizzato su richiesta

286
00:14:47,250 --> 00:14:51,750
‫protocollo punto, quindi due punti barra barra barra e quindi l'host, ok?

287
00:14:51,750 --> 00:14:54,590
‫Quindi stiamo praticamente preparando questo qui per lavorare

288
00:14:54,590 --> 00:14:57,260
‫sia nello sviluppo che nella produzione.

289
00:14:57,260 --> 00:15:00,630
‫Quindi, chiedi dot get e poi

290
00:15:00,630 --> 00:15:01,513
‫host.

291
00:15:02,760 --> 00:15:04,950
‫Va bene, ecco come otteniamo l'host,

292
00:15:04,950 --> 00:15:09,100
‫e poi slash api slash versione uno, e immagino che non sia

293
00:15:09,100 --> 00:15:11,860
‫l'ideale definire un livello hardcoded come questo, ma

294
00:15:11,860 --> 00:15:13,170
‫di nuovo,

295
00:15:13,170 --> 00:15:15,260
‫questo è qualcosa che sistemeremo un

296
00:15:15,260 --> 00:15:17,080
‫po' più tardi, va bene?

297
00:15:17,080 --> 00:15:20,100
‫E vedo che questo in realtà non è corretto.

298
00:15:20,100 --> 00:15:22,680
‫Queste parentesi graffe dovrebbero esserci.

299
00:15:22,680 --> 00:15:24,263
‫Quindi, ora, utenti,

300
00:15:25,676 --> 00:15:26,843
‫resetPassword e

301
00:15:28,910 --> 00:15:32,830
‫poi ancora un'altra barra e infine il token.

302
00:15:32,830 --> 00:15:34,833
‫Ok, allora resetToken.

303
00:15:35,790 --> 00:15:36,623
‫Va bene?

304
00:15:36,623 --> 00:15:38,780
‫E come abbiamo discusso in precedenza,

305
00:15:38,780 --> 00:15:40,000
‫nell'ultima lezione, qui

306
00:15:40,000 --> 00:15:44,000
‫dobbiamo effettivamente inviare il resetToken semplice e originale e non quello crittografato.

307
00:15:44,000 --> 00:15:44,833
‫Va bene?

308
00:15:44,833 --> 00:15:46,170
‫Quindi, nel

309
00:15:46,170 --> 00:15:49,810
‫passaggio successivo, confronteremo il token originale con quello crittografato.

310
00:15:49,810 --> 00:15:52,780
‫Quindi, di nuovo, proprio come abbiamo discusso nell'ultimo video.

311
00:15:52,780 --> 00:15:56,657
‫Dagli un salvataggio qui ora, e quindi questo è il nostro URL di ripristino.

312
00:16:00,940 --> 00:16:04,490
‫E ora, in base a questo URL, creiamo rapidamente

313
00:16:04,490 --> 00:16:06,233
‫anche qui il messaggio.

314
00:16:07,950 --> 00:16:11,113
‫Allora, hai dimenticato la password?

315
00:16:13,120 --> 00:16:17,720
‫Invia una richiesta PATCH con la tua nuova

316
00:16:18,900 --> 00:16:21,650
‫password e passwordConferma ovviamente,

317
00:16:24,380 --> 00:16:26,273
‫all'URL di

318
00:16:30,850 --> 00:16:34,270
‫ripristino che abbiamo appena creato, ok?

319
00:16:34,270 --> 00:16:37,500
‫Quindi, in sostanza, dando all'utente alcune istruzioni qui.

320
00:16:37,500 --> 00:16:39,373
‫Quindi, su una nuova riga,

321
00:16:40,670 --> 00:16:44,053
‫diciamo anche che se non hai dimenticato la password,

322
00:16:47,820 --> 00:16:49,610
‫ignora questa email.

323
00:16:49,610 --> 00:16:51,690
‫Quindi questo è un messaggio comune, e

324
00:16:51,690 --> 00:16:54,320
‫di nuovo, sono sicuro che l'hai visto in un

325
00:16:54,320 --> 00:16:55,963
‫modo o nell'altro, va bene.

326
00:16:56,860 --> 00:16:59,900
‫Quindi ora, finalmente, inviamo l'e-mail e

327
00:16:59,900 --> 00:17:02,020
‫ricordiamo che sendEmail è

328
00:17:02,020 --> 00:17:03,640
‫una funzione asincrona.

329
00:17:03,640 --> 00:17:06,470
‫E quindi, dobbiamo aspettarlo qui.

330
00:17:06,470 --> 00:17:07,303
‫Va bene?

331
00:17:07,303 --> 00:17:09,693
‫Perché, ovviamente, restituirà una Promessa.

332
00:17:11,470 --> 00:17:14,850
‫E ricorda ora che la funzione sendEmail qui

333
00:17:14,850 --> 00:17:17,490
‫accetta un oggetto con alcune opzioni.

334
00:17:17,490 --> 00:17:22,490
‫Quindi l'e-mail è utente. e-mail, giusto?

335
00:17:23,730 --> 00:17:28,150
‫Oppure potremmo anche dire, req. corpo. e-mail.

336
00:17:28,150 --> 00:17:31,233
‫Quindi è esattamente lo stesso, in realtà, giusto?

337
00:17:32,900 --> 00:17:35,773
‫Quindi l'argomento che vogliamo

338
00:17:36,690 --> 00:17:41,363
‫dire è il token di reimpostazione della password.

339
00:17:44,850 --> 00:17:48,540
‫Diciamo subito che è valido solo per 10

340
00:17:48,540 --> 00:17:52,290
‫minuti, in modo che l'utente sappia che deve sbrigarsi.

341
00:17:52,290 --> 00:17:55,113
‫Ok, e poi finalmente anche il messaggio.

342
00:17:56,940 --> 00:17:57,773
‫Va bene.

343
00:17:57,773 --> 00:18:00,080
‫Quindi, lo aspettiamo,

344
00:18:00,080 --> 00:18:04,330
‫e poi inviamo anche, ovviamente, qualche risposta.

345
00:18:04,330 --> 00:18:07,130
‫Ok, quindi ci deve sempre essere una

346
00:18:07,130 --> 00:18:08,860
‫risposta, altrimenti, come già

347
00:18:08,860 --> 00:18:11,970
‫sai, il ciclo di richiesta/risposta non finirà mai.

348
00:18:11,970 --> 00:18:14,700
‫Quindi inviamo semplicemente un codice

349
00:18:14,700 --> 00:18:18,720
‫200 e poi un messaggio ben formattato con

350
00:18:19,670 --> 00:18:22,023
‫uno stato di

351
00:18:25,640 --> 00:18:28,550
‫successo, e poi solo un messaggio

352
00:18:28,550 --> 00:18:32,410
‫veloce che dice, Token inviato a e-mail.

353
00:18:32,410 --> 00:18:33,243
‫Va bene.

354
00:18:33,243 --> 00:18:37,490
‫E, ovviamente, non possiamo inviare il token di ripristino proprio qui, accanto,

355
00:18:37,490 --> 00:18:40,970
‫giusto, perché, in tal caso, tutti potrebbero semplicemente ripristinare la

356
00:18:40,970 --> 00:18:42,910
‫password di chiunque e

357
00:18:42,910 --> 00:18:45,440
‫prendere il controllo di qualsiasi account desiderassero.

358
00:18:45,440 --> 00:18:47,740
‫E quindi questo è l'intero motivo per cui

359
00:18:47,740 --> 00:18:49,940
‫lo inviamo a un indirizzo e-mail, perché

360
00:18:49,940 --> 00:18:51,800
‫presumiamo che l'e-mail sia un

361
00:18:51,800 --> 00:18:54,187
‫luogo sicuro, a cui solo l'utente ha accesso.

362
00:18:54,187 --> 00:18:55,020
‫Va bene.

363
00:18:56,990 --> 00:19:00,170
‫Whoo, quindi, anche questo video è piuttosto lungo, ma

364
00:19:00,170 --> 00:19:01,620
‫non abbiamo ancora finito.

365
00:19:01,620 --> 00:19:04,200
‫Abbiamo quasi finito, ma non del

366
00:19:04,200 --> 00:19:06,590
‫tutto, perché potrebbe verificarsi un

367
00:19:06,590 --> 00:19:10,560
‫errore utilizzando questo sendEmail, ok, quindi in tal caso, ovviamente,

368
00:19:10,560 --> 00:19:14,100
‫vogliamo inviare un messaggio di errore al client.

369
00:19:14,100 --> 00:19:16,720
‫Ma in questo caso, in realtà dobbiamo fare di più

370
00:19:16,720 --> 00:19:18,980
‫che inviare semplicemente un messaggio di errore.

371
00:19:18,980 --> 00:19:22,707
‫In pratica, dobbiamo ripristinare il token di reimpostazione della password

372
00:19:22,707 --> 00:19:26,660
‫e la reimpostazione della password è scaduta che abbiamo definito, ok?

373
00:19:26,660 --> 00:19:29,140
‫E quindi in questo momento non è

374
00:19:29,140 --> 00:19:31,340
‫sufficiente rilevare semplicemente l'errore e inviarlo

375
00:19:31,340 --> 00:19:34,100
‫al nostro middleware di gestione degli errori globale.

376
00:19:34,100 --> 00:19:36,980
‫Ma invece dobbiamo semplicemente aggiungere un

377
00:19:36,980 --> 00:19:39,660
‫blocco try-catch proprio qui.

378
00:19:39,660 --> 00:19:42,290
‫Quindi di nuovo, perché in realtà

379
00:19:42,290 --> 00:19:45,363
‫vogliamo fare di più che semplicemente inviare un

380
00:19:46,850 --> 00:19:49,633
‫errore al client, quindi proviamo fondamentalmente a

381
00:19:50,950 --> 00:19:53,763
‫farlo, giusto, ma nel caso ci sia un

382
00:19:54,660 --> 00:19:57,630
‫errore, allora, ovviamente, questo blocco qui viene eseguito.

383
00:19:57,630 --> 00:19:58,463
‫Va bene?

384
00:19:58,463 --> 00:20:01,380
‫Quindi quello che vogliamo fare in quel

385
00:20:01,380 --> 00:20:04,160
‫caso, beh, in pratica, come ho

386
00:20:04,160 --> 00:20:08,140
‫detto, vogliamo reimpostare sia il token che la proprietà scade.

387
00:20:08,140 --> 00:20:09,620
‫Va bene.

388
00:20:09,620 --> 00:20:11,850
‫Quindi, passwordResetToken e

389
00:20:15,360 --> 00:20:18,950
‫impostalo su undefined, va bene.

390
00:20:18,950 --> 00:20:22,053
‫E lo stesso per passwordResetExpires.

391
00:20:24,670 --> 00:20:25,503
‫Va bene.

392
00:20:25,503 --> 00:20:27,350
‫E poi, ovviamente, proprio come

393
00:20:27,350 --> 00:20:30,830
‫prima, questo modifica solo i dati, ma non li salva davvero.

394
00:20:30,830 --> 00:20:33,693
‫E quindi andiamo ad aggiungere, prendi questo,

395
00:20:35,560 --> 00:20:39,730
‫e quindi in pratica per salvare i dati in questo caso.

396
00:20:39,730 --> 00:20:41,750
‫Ok, e poi solo per

397
00:20:41,750 --> 00:20:45,140
‫finire, ovviamente, poi torniamo con un errore al

398
00:20:45,140 --> 00:20:46,620
‫prossimo middleware.

399
00:20:46,620 --> 00:20:48,223
‫Quindi newAppError,

400
00:20:50,970 --> 00:20:55,373
‫si è verificato un errore durante l'invio dell'e-mail.

401
00:20:57,940 --> 00:20:59,333
‫Riprovare più tardi.

402
00:21:00,220 --> 00:21:03,700
‫E in questo caso, il codice di errore può essere effettivamente un 500.

403
00:21:03,700 --> 00:21:06,980
‫Quindi questo è davvero allora, come un errore che è

404
00:21:06,980 --> 00:21:09,930
‫successo sul server, e quindi deve essere un

405
00:21:09,930 --> 00:21:12,893
‫codice cinque, e 500 è proprio, come quello standard.

406
00:21:13,740 --> 00:21:15,160
‫Va bene.

407
00:21:15,160 --> 00:21:20,160
‫Quindi, ora andiamo avanti e proviamo di nuovo, va bene.

408
00:21:20,830 --> 00:21:25,130
‫Quindi questo è di nuovo piuttosto lungo, ma, beh,

409
00:21:25,130 --> 00:21:27,200
‫dobbiamo farlo, giusto?

410
00:21:27,200 --> 00:21:31,173
‫Quindi, password dimenticata, con questa email diamo un'occhiata.

411
00:21:32,260 --> 00:21:34,270
‫Quindi questo potrebbe non

412
00:21:34,270 --> 00:21:36,400
‫richiedere molto tempo, a causa dell'invio

413
00:21:36,400 --> 00:21:40,360
‫dell'e-mail, ma in realtà ha funzionato ora, ci sono voluti cinque

414
00:21:40,360 --> 00:21:42,840
‫secondi, ma vediamo Token inviato all'e-mail.

415
00:21:42,840 --> 00:21:45,770
‫e quindi, come sappiamo, poiché abbiamo usato Mailtrap, in realtà non

416
00:21:45,770 --> 00:21:49,810
‫ha inviato questa email a hello@jones. io ma

417
00:21:49,810 --> 00:21:53,010
‫invece l'e-mail dovrebbe essere ora

418
00:21:53,010 --> 00:21:55,940
‫intrappolata all'interno di Mailtrap.

419
00:21:55,940 --> 00:21:59,003
‫E, in effetti, qui sul lato sinistro, ora è apparso.

420
00:21:59,890 --> 00:22:01,170
‫Va bene.

421
00:22:01,170 --> 00:22:04,440
‫Quindi, questa è l'e-mail che abbiamo specificato e qui

422
00:22:04,440 --> 00:22:06,467
‫otteniamo il nostro bel URL.

423
00:22:07,960 --> 00:22:11,980
‫Ok, quindi quello che abbiamo creato con il protocollo, l'host

424
00:22:11,980 --> 00:22:15,070
‫e poi anche con il token.

425
00:22:15,070 --> 00:22:17,210
‫Quindi diamo solo un'occhiata se

426
00:22:17,210 --> 00:22:18,910
‫questo è davvero

427
00:22:18,910 --> 00:22:20,873
‫il nostro token semplice,

428
00:22:22,130 --> 00:22:26,690
‫quindi termina in 88df e, in effetti, abbiamo resetToken qui, 88df.

429
00:22:26,690 --> 00:22:29,050
‫E ora nel database, dovremmo

430
00:22:29,050 --> 00:22:31,890
‫avere il token che termina con 1111.

431
00:22:31,890 --> 00:22:34,883
‫Quindi, confermiamo che, qui

432
00:22:35,780 --> 00:22:40,780
‫in Compass, ricaricalo e, in effetti, ci siamo, ok?

433
00:22:41,470 --> 00:22:45,260
‫E così di nuovo, questo qui è tra 10 minuti da adesso.

434
00:22:45,260 --> 00:22:47,910
‫Fantastico, quindi abbiamo finito quella parte.

435
00:22:47,910 --> 00:22:50,290
‫Successivamente, nel prossimo video, reimposteremo effettivamente

436
00:22:50,290 --> 00:22:52,320
‫la password, in base,

437
00:22:52,320 --> 00:22:54,590
‫ovviamente, alla nuova password che

438
00:22:54,590 --> 00:22:58,030
‫l'utente invia con la richiesta di reimpostazione della password.

439
00:22:58,030 --> 00:22:58,993
‫Allora, ci vediamo lì.

