﻿1
00:00:01,000 --> 00:00:03,340
‫Istruttore: Così abbiamo appreso nell'ultima

2
00:00:03,340 --> 00:00:06,030
‫lezione che il token Web JSON deve

3
00:00:06,030 --> 00:00:08,930
‫essere archiviato in un cookie sicuro solo HTTP.

4
00:00:08,930 --> 00:00:11,470
‫Ma in questo momento, stiamo solo inviando

5
00:00:11,470 --> 00:00:14,790
‫il token come una semplice stringa nella nostra risposta JSON.

6
00:00:14,790 --> 00:00:18,690
‫Quindi, in questo video, inviamo anche il token come cookie, in modo

7
00:00:18,690 --> 00:00:20,960
‫che il browser possa salvarlo in questo

8
00:00:20,960 --> 00:00:22,473
‫modo più sicuro.

9
00:00:23,920 --> 00:00:25,550
‫Quindi siamo nel nostro codice.

10
00:00:25,550 --> 00:00:28,193
‫Inviamo effettivamente il token al client?

11
00:00:29,170 --> 00:00:32,610
‫Bene, ricorda, questo è in authController e

12
00:00:32,610 --> 00:00:35,920
‫proprio qui nella funzione createSendToken.

13
00:00:35,920 --> 00:00:39,040
‫Quindi, prima, avevamo praticamente tutto questo

14
00:00:39,040 --> 00:00:43,180
‫codice in molti posti diversi, ma poi abbiamo refactoring

15
00:00:43,180 --> 00:00:46,400
‫tutto questo solo in questa funzione createSendToken.

16
00:00:46,400 --> 00:00:49,090
‫Va bene, quindi è qui che lavoreremo ora.

17
00:00:49,090 --> 00:00:50,980
‫Ora, sono sicuro che hai

18
00:00:50,980 --> 00:00:53,320
‫familiarità con il modo in cui funzionano i

19
00:00:53,320 --> 00:00:56,680
‫cookie in generale, ma solo per assicurarci che siamo tutti sulla

20
00:00:56,680 --> 00:00:58,960
‫stessa pagina qui, parliamo un po' dei cookie.

21
00:00:58,960 --> 00:01:02,330
‫Quindi, prima di tutto, un cookie è fondamentalmente solo

22
00:01:02,330 --> 00:01:06,240
‫un piccolo pezzo di testo che un server può inviare ai client.

23
00:01:06,240 --> 00:01:08,960
‫Quindi, quando il client riceve un cookie,

24
00:01:08,960 --> 00:01:10,650
‫lo memorizzerà automaticamente

25
00:01:10,650 --> 00:01:12,860
‫e quindi lo reinvierà automaticamente

26
00:01:12,860 --> 00:01:16,360
‫insieme a tutte le richieste future allo stesso server.

27
00:01:16,360 --> 00:01:20,130
‫Va bene, ancora una volta, un browser memorizza automaticamente un

28
00:01:20,130 --> 00:01:23,010
‫cookie che riceve e lo rimanda

29
00:01:23,010 --> 00:01:27,320
‫in tutte le richieste future a quel server da cui proviene.

30
00:01:27,320 --> 00:01:29,500
‫Ok, per ora, questo non sarà

31
00:01:29,500 --> 00:01:31,090
‫molto importante per

32
00:01:31,090 --> 00:01:34,020
‫noi, perché stiamo solo testando l'API usando Postman.

33
00:01:34,020 --> 00:01:37,110
‫Ma un po' più tardi, quando renderemo le

34
00:01:37,110 --> 00:01:39,510
‫pagine Web dinamiche e interagiremo realmente

35
00:01:39,510 --> 00:01:41,450
‫con il browser, diventerà

36
00:01:41,450 --> 00:01:44,220
‫davvero importante che il browser restituisca il

37
00:01:44,220 --> 00:01:46,410
‫token praticamente automaticamente in ogni richiesta.

38
00:01:46,410 --> 00:01:49,640
‫Ok, e per allora, ovviamente, ne parleremo di più.

39
00:01:49,640 --> 00:01:52,220
‫Ma comunque, impariamo ora come creare e

40
00:01:52,220 --> 00:01:53,950
‫inviare effettivamente un cookie.

41
00:01:53,950 --> 00:01:57,720
‫Quindi, per inviare un cookie, è in realtà molto semplice.

42
00:01:57,720 --> 00:02:00,380
‫Tutto ciò che dobbiamo fare è fondamentalmente

43
00:02:00,380 --> 00:02:02,023
‫collegarlo all'oggetto risposta.

44
00:02:03,010 --> 00:02:06,910
‫Quindi diciamo ris. cookie e poi tutto

45
00:02:06,910 --> 00:02:09,550
‫ciò che dobbiamo fare è specificare il

46
00:02:09,550 --> 00:02:11,630
‫nome del cookie, e lo chiamo

47
00:02:11,630 --> 00:02:14,860
‫token web JSON, quindi i dati che vogliamo effettivamente

48
00:02:14,860 --> 00:02:17,830
‫inviare nel cookie, e quindi questa sarà ovviamente la

49
00:02:17,830 --> 00:02:22,020
‫variabile token e poi, dopo, un paio di opzioni per il cookie.

50
00:02:22,020 --> 00:02:24,119
‫E la prima opzione

51
00:02:24,119 --> 00:02:26,810
‫che specificheremo è la proprietà scade.

52
00:02:26,810 --> 00:02:29,620
‫Ok, quindi in pratica, questa proprietà di

53
00:02:29,620 --> 00:02:33,200
‫scadenza farà sì che il browser o il client in

54
00:02:33,200 --> 00:02:36,360
‫generale eliminino il cookie dopo che è scaduto.

55
00:02:36,360 --> 00:02:38,780
‫Ok, quindi impostiamo la data di

56
00:02:38,780 --> 00:02:43,360
‫scadenza simile a quella che abbiamo impostato nel token web JSON, ok.

57
00:02:43,360 --> 00:02:45,810
‫Quindi creiamo effettivamente una nuova variabile

58
00:02:46,760 --> 00:02:49,390
‫per questo, ok, perché il pacchetto token Web

59
00:02:49,390 --> 00:02:51,870
‫JSON può quindi funzionare con questo formato.

60
00:02:51,870 --> 00:02:55,450
‫Ok, ma in JavaScript, questo è un po' privo di significato

61
00:02:55,450 --> 00:02:58,923
‫e quindi, invece, creiamo una variabile con un numero reale.

62
00:02:59,850 --> 00:03:02,053
‫Quindi chiamiamolo ancora JWT, quindi

63
00:03:03,090 --> 00:03:03,963
‫cookie,

64
00:03:06,210 --> 00:03:10,740
‫scade e lo impostiamo ancora su 90, quindi 90 giorni, ma

65
00:03:10,740 --> 00:03:12,810
‫ancora una volta, senza D.

66
00:03:12,810 --> 00:03:16,210
‫Ok, così ora possiamo effettivamente

67
00:03:16,210 --> 00:03:21,080
‫operare con esso perché dovremo convertirlo in millisecondi, ok.

68
00:03:21,080 --> 00:03:23,540
‫Quindi, quando dovrebbe scadere questo cookie?

69
00:03:23,540 --> 00:03:26,610
‫Dovrebbe scadere a una nuova data.

70
00:03:26,610 --> 00:03:28,890
‫Quindi in JavaScript, quando si specificano

71
00:03:28,890 --> 00:03:30,800
‫le date, dobbiamo sempre dire

72
00:03:30,800 --> 00:03:35,403
‫nuova data e quindi dovrebbe scadere in questo momento, più questi 90 giorni.

73
00:03:36,820 --> 00:03:39,483
‫Ok, quindi ora, in questo modo ovviamente.

74
00:03:41,470 --> 00:03:43,633
‫E poi processa. env, e

75
00:03:44,894 --> 00:03:48,280
‫ora usiamo questo e poi mettiamo semplicemente

76
00:03:49,840 --> 00:03:52,320
‫il biscotto lì dentro, ok.

77
00:03:52,320 --> 00:03:55,560
‫Ma ora, ovviamente, dobbiamo convertirlo in millisecondi.

78
00:03:55,560 --> 00:03:57,410
‫Quindi abbiamo 90 giorni adesso.

79
00:03:57,410 --> 00:03:59,910
‫Quindi due ore, sono le 24.

80
00:03:59,910 --> 00:04:01,770
‫Due minuti, sono 60.

81
00:04:01,770 --> 00:04:04,810
‫Due secondi, sono di nuovo 60 volte.

82
00:04:04,810 --> 00:04:08,610
‫E poi in millisecondi, mille volte, ok.

83
00:04:08,610 --> 00:04:10,600
‫E, naturalmente, potrei fare tutto in

84
00:04:10,600 --> 00:04:14,090
‫una volta, ma questo è solo per specificare cosa stiamo facendo esattamente.

85
00:04:14,090 --> 00:04:15,120
‫Quindi, per mostrare

86
00:04:15,120 --> 00:04:17,163
‫che lo stiamo effettivamente convertendo in millisecondi.

87
00:04:18,040 --> 00:04:21,603
‫La prossima opzione sarà l'opzione sicura.

88
00:04:22,610 --> 00:04:24,560
‫Quindi imposteremo questo su true e

89
00:04:24,560 --> 00:04:27,530
‫così in questo modo, il cookie verrà inviato solo

90
00:04:27,530 --> 00:04:29,140
‫su una connessione crittografata.

91
00:04:29,140 --> 00:04:32,830
‫Quindi, in pratica, stiamo usando solo HTTPS, va bene.

92
00:04:32,830 --> 00:04:37,030
‫E infine, è l'opzione httpOnly di cui abbiamo

93
00:04:37,030 --> 00:04:38,593
‫parlato prima.

94
00:04:41,630 --> 00:04:43,740
‫Ok, quindi impostiamo questo su true

95
00:04:43,740 --> 00:04:45,820
‫e così questo farà in

96
00:04:45,820 --> 00:04:50,410
‫modo che il cookie non sia accessibile o modificato in alcun modo dal browser.

97
00:04:50,410 --> 00:04:53,280
‫Ok, quindi questo è importante per prevenire

98
00:04:53,280 --> 00:04:55,900
‫quegli attacchi di scripting tra siti.

99
00:04:55,900 --> 00:04:58,110
‫Va bene, quindi tutto ciò che

100
00:04:58,110 --> 00:05:01,340
‫il browser farà quando impostiamo httpOnly su true

101
00:05:01,340 --> 00:05:03,390
‫è fondamentalmente ricevere il

102
00:05:03,390 --> 00:05:07,180
‫cookie, memorizzarlo e quindi inviarlo automaticamente insieme a ogni richiesta.

103
00:05:07,180 --> 00:05:09,180
‫Ok, e in effetti è così.

104
00:05:09,180 --> 00:05:12,770
‫Quindi è così che sostanzialmente definiamo il cookie, quindi diciamo

105
00:05:12,770 --> 00:05:14,360
‫questa parte, e poi lo

106
00:05:14,360 --> 00:05:17,510
‫inviamo usando res. biscotto.

107
00:05:17,510 --> 00:05:20,850
‫Ora, se volessimo testarlo in questo momento, non funzionerebbe perché

108
00:05:20,850 --> 00:05:23,990
‫in questo momento in realtà non stiamo usando HTTPS.

109
00:05:23,990 --> 00:05:26,650
‫E quindi per via di questo secure: true,

110
00:05:26,650 --> 00:05:28,130
‫il cookie non verrebbe

111
00:05:28,130 --> 00:05:30,590
‫creato e non verrebbe inviato al client.

112
00:05:30,590 --> 00:05:31,920
‫Va bene, quindi

113
00:05:31,920 --> 00:05:36,180
‫in pratica, vogliamo solo attivare questa parte qui in produzione.

114
00:05:36,180 --> 00:05:38,820
‫Quindi quello che farò è fondamentalmente

115
00:05:38,820 --> 00:05:42,510
‫esportare questo intero oggetto qui in una variabile separata.

116
00:05:42,510 --> 00:05:44,160
‫Ok, allora lascia che te lo mostri.

117
00:05:45,550 --> 00:05:46,383
‫Quindi

118
00:05:47,242 --> 00:05:49,710
‫const cookieOptions dovrebbe essere uguale

119
00:05:50,780 --> 00:05:54,003
‫a this e poi qui, lo passiamo.

120
00:05:55,440 --> 00:05:56,273
‫Va bene.

121
00:05:57,480 --> 00:06:00,300
‫Ora, ovviamente, non vogliamo questa parte qui,

122
00:06:00,300 --> 00:06:03,100
‫ma solo quando siamo in produzione.

123
00:06:03,100 --> 00:06:04,050
‫Quindi

124
00:06:06,830 --> 00:06:11,670
‫diciamo se process. avv. NODE_ENV, ricorda che è dove

125
00:06:11,670 --> 00:06:13,500
‫è memorizzato se siamo in

126
00:06:13,500 --> 00:06:15,023
‫produzione o meno.

127
00:06:16,130 --> 00:06:17,780
‫Quindi, se è

128
00:06:20,210 --> 00:06:24,590
‫uguale alla produzione, imposta cookieOptions. sicuro uguale a

129
00:06:26,490 --> 00:06:27,363
‫vero.

130
00:06:28,970 --> 00:06:31,533
‫Ok, e ora possiamo rimuoverlo da qui.

131
00:06:33,600 --> 00:06:36,430
‫Sì, quindi ora, solo quando saremo in

132
00:06:36,430 --> 00:06:39,300
‫produzione, avremo le opzioni sicure impostate su true.

133
00:06:39,300 --> 00:06:42,150
‫E in caso contrario, verrà inviato solo in

134
00:06:42,150 --> 00:06:45,470
‫questo modo, quindi solo con la data di scadenza e httpOnly.

135
00:06:45,470 --> 00:06:48,263
‫Ok, quindi ora proviamo questo.

136
00:06:50,200 --> 00:06:53,153
‫E lo proverò creando un nuovo utente.

137
00:06:54,940 --> 00:06:56,970
‫Quindi qui in Iscriviti in

138
00:06:58,600 --> 00:06:59,750
‫realtà e chiamiamo

139
00:07:00,880 --> 00:07:03,180
‫questo utente@jonas. io.

140
00:07:03,180 --> 00:07:04,733
‫Sempre con la stessa password.

141
00:07:07,390 --> 00:07:09,100
‫Lo chiamerò anche Utente

142
00:07:09,100 --> 00:07:13,273
‫e diciamo che il ruolo qui è una guida, così

143
00:07:14,520 --> 00:07:17,823
‫solo per avere anche alcuni ruoli diversi qui.

144
00:07:19,040 --> 00:07:20,360
‫Dagli un po' più di spazio.

145
00:07:20,360 --> 00:07:22,670
‫E ora, proviamoci davvero.

146
00:07:22,670 --> 00:07:25,500
‫E la risposta è proprio come ci aspettavamo

147
00:07:25,500 --> 00:07:26,810
‫con la differenza

148
00:07:26,810 --> 00:07:30,190
‫che ora otteniamo un cookie qui in questa scheda Cookie.

149
00:07:30,190 --> 00:07:32,160
‫E così infatti, qui,

150
00:07:32,160 --> 00:07:35,450
‫otteniamo il nome del cookie, il valore.

151
00:07:35,450 --> 00:07:37,220
‫Abbiamo anche la data

152
00:07:37,220 --> 00:07:40,160
‫di scadenza, che è esattamente 90 giorni da adesso.

153
00:07:40,160 --> 00:07:44,913
‫Abbiamo httpOnly impostato su true e anche secure impostato su false.

154
00:07:45,970 --> 00:07:47,210
‫Va bene.

155
00:07:47,210 --> 00:07:49,970
‫Ottimo, possiamo anche vedere tutti i cookie che abbiamo

156
00:07:49,970 --> 00:07:51,733
‫qui in questa scheda Cookie.

157
00:07:52,690 --> 00:07:55,480
‫E così di nuovo, vediamo quel cookie che abbiamo

158
00:07:55,480 --> 00:07:57,673
‫ricevuto da questo dominio, va bene.

159
00:07:58,630 --> 00:08:01,540
‫Ora, solo un'ultima cosa che in realtà

160
00:08:01,540 --> 00:08:04,130
‫voglio cambiare in quella funzione su

161
00:08:04,130 --> 00:08:05,313
‫cui stiamo

162
00:08:06,200 --> 00:08:10,660
‫lavorando, quindi createSendToken, è sostanzialmente sbarazzarsi di questa password qui nell'output.

163
00:08:10,660 --> 00:08:13,560
‫Ok, quindi nel nostro schema, lo abbiamo effettivamente impostato per

164
00:08:13,560 --> 00:08:16,510
‫selezionare false, in modo che non venga visualizzato quando effettuiamo

165
00:08:16,510 --> 00:08:18,380
‫query per tutti gli utenti.

166
00:08:18,380 --> 00:08:21,290
‫Ma in questo caso, deriva dalla creazione di un nuovo documento

167
00:08:21,290 --> 00:08:24,410
‫e quindi è diverso ed è per questo che lo vediamo qui.

168
00:08:24,410 --> 00:08:27,373
‫Ok, ma in realtà possiamo risolverlo molto facilmente.

169
00:08:28,650 --> 00:08:31,850
‫Ok, quindi tutto ciò che dobbiamo fare in realtà è

170
00:08:33,660 --> 00:08:35,010
‫impostare l'utente. password

171
00:08:36,370 --> 00:08:37,563
‫a non definita.

172
00:08:38,750 --> 00:08:40,590
‫Va bene, quindi

173
00:08:42,630 --> 00:08:43,920
‫dovrebbe

174
00:08:46,340 --> 00:08:48,490
‫rimuovere le password dall'output.

175
00:08:48,490 --> 00:08:49,630
‫Va bene.

176
00:08:49,630 --> 00:08:53,203
‫Quindi cancelliamo questo utente qui che abbiamo appena creato.

177
00:08:57,890 --> 00:08:59,850
‫E riprova solo

178
00:08:59,850 --> 00:09:04,010
‫per vedere se la password non viene più visualizzata.

179
00:09:04,010 --> 00:09:07,170
‫E sì, in effetti ora non c'è più.

180
00:09:07,170 --> 00:09:09,820
‫E ancora, il nostro biscotto, ovviamente, è qui.

181
00:09:09,820 --> 00:09:12,450
‫E quando ora arriviamo alla nostra scheda Cookie,

182
00:09:12,450 --> 00:09:14,710
‫beh, allora hai ancora solo un cookie

183
00:09:14,710 --> 00:09:17,430
‫perché quello vecchio è stato praticamente sovrascritto da questo

184
00:09:17,430 --> 00:09:18,600
‫nuovo e questo

185
00:09:18,600 --> 00:09:20,380
‫perché hanno lo stesso nome.

186
00:09:20,380 --> 00:09:23,940
‫Quindi il nome è come l'identificatore univoco di un cookie.

187
00:09:23,940 --> 00:09:26,160
‫E quindi se ne riceviamo uno con

188
00:09:26,160 --> 00:09:27,570
‫il nome che è

189
00:09:27,570 --> 00:09:30,683
‫già stato dato, beh, allora il vecchio viene semplicemente sostituito.

190
00:09:31,720 --> 00:09:33,800
‫Ok, e in effetti è così.

191
00:09:33,800 --> 00:09:36,737
‫Quindi è così che inviamo un cookie solo HTTP e,

192
00:09:36,737 --> 00:09:38,730
‫di nuovo, ne parleremo di più

193
00:09:38,730 --> 00:09:40,813
‫quando costruiremo il nostro sito Web dinamico.

