1
00:00:03,680 --> 00:00:08,435
Ora che comprendiamo i cookie e le sessioni express,

2
00:00:08,435 --> 00:00:11,895
in questo esercizio, diamo un'occhiata ai cookie in particolare.

3
00:00:11,895 --> 00:00:15,490
Vedremo come possiamo utilizzare il middleware cookie-parser

4
00:00:15,490 --> 00:00:22,185
per impostare e gestire i cookie all'interno della nostra applicazione espressa.

5
00:00:22,185 --> 00:00:26,900
Tornando alla nostra applicazione Confusione Server Express

6
00:00:26,900 --> 00:00:28,695
su cui abbiamo lavorato finora,

7
00:00:28,695 --> 00:00:32,420
noterai in cima che il parser di cookie è

8
00:00:32,420 --> 00:00:37,200
già incluso nella nostra applicazione espressa.

9
00:00:37,200 --> 00:00:40,150
Se è necessario installare in modo esplicito cookie-parser,

10
00:00:40,150 --> 00:00:45,230
è sufficiente digitare «npm install cookie-parser meno meno save».

11
00:00:45,230 --> 00:00:48,740
Ma dal momento che il nostro Generatore Express ha già incluso

12
00:00:48,740 --> 00:00:52,810
il parser di cookie nella nostra applicazione espressa che abbiamo impalcato,

13
00:00:52,810 --> 00:00:56,210
non abbiamo bisogno di fare questo passo in questo esercizio.

14
00:00:56,210 --> 00:00:59,430
Quindi, vedi che il parser di cookie è già incluso lì,

15
00:00:59,430 --> 00:01:03,910
e quindi se scorri verso il basso,

16
00:01:03,910 --> 00:01:08,290
vedrai che nel codice qui sotto,

17
00:01:08,290 --> 00:01:13,925
vedrai che il parser di cookie è già stato incluso nel middleware lì.

18
00:01:13,925 --> 00:01:16,330
Ora, per questo parser di cookie,

19
00:01:16,330 --> 00:01:19,885
useremo i cookie firmati in questo esercizio.

20
00:01:19,885 --> 00:01:21,680
Quindi, per questo parser di cookie,

21
00:01:21,680 --> 00:01:27,580
ho intenzione di fornire una chiave segreta come parametro qui.

22
00:01:27,580 --> 00:01:29,990
La chiave segreta potrebbe essere qualsiasi stringa lì,

23
00:01:29,990 --> 00:01:37,450
quindi sto solo andando a fornire una stringa come questa, dirò 12345-67890.

24
00:01:37,450 --> 00:01:39,915
Non deve essere nulla di significativo,

25
00:01:39,915 --> 00:01:48,650
è solo una chiave che può essere utilizzata dal

26
00:01:48,650 --> 00:01:53,160
nostro parser di cookie per crittografare

27
00:01:53,160 --> 00:01:59,560
le informazioni e firmare il cookie che viene inviato dal server al client.

28
00:01:59,560 --> 00:02:05,775
Quindi, una volta impostato il nostro cookie parser per gestire i cookie firmati,

29
00:02:05,775 --> 00:02:08,805
quindi all'interno dell'autorizzazione stessa,

30
00:02:08,805 --> 00:02:13,555
in modo da vedere che abbiamo l'autorizzazione che abbiamo costruito qui.

31
00:02:13,555 --> 00:02:15,130
Ora, all'interno dell'autorizzazione,

32
00:02:15,130 --> 00:02:16,735
quello che faremo è,

33
00:02:16,735 --> 00:02:23,385
la prima volta che l'utente tenta di accedere al server,

34
00:02:23,385 --> 00:02:29,870
ci aspettiamo che l'utente si autorizzi.

35
00:02:29,870 --> 00:02:37,360
Successivamente, imposteremo il cookie sul lato client dal server e

36
00:02:37,360 --> 00:02:41,350
successivamente il client non dovrà

37
00:02:41,350 --> 00:02:45,420
continuare esplicitamente a inviare le informazioni di autenticazione di base.

38
00:02:45,420 --> 00:02:53,335
Invece, il client dovrà semplicemente includere il cookie nella richiesta in uscita.

39
00:02:53,335 --> 00:02:56,650
Dal momento che stiamo usando i cookie firmati qui, quindi,

40
00:02:56,650 --> 00:03:01,010
quando arriva la richiesta in arrivo,

41
00:03:01,010 --> 00:03:04,490
quindi gestiremo che all'interno dell'autorizzazione.

42
00:03:04,490 --> 00:03:08,885
Ora, si ricorda che abbiamo già impostato il middleware di autorizzazione qui.

43
00:03:08,885 --> 00:03:12,980
Quindi, stiamo andando a modificare questo middleware di autorizzazione per fare uso di

44
00:03:12,980 --> 00:03:17,445
cookie invece dell'intestazione di autorizzazione.

45
00:03:17,445 --> 00:03:20,910
Quindi, quello che faremo qui è che,

46
00:03:20,910 --> 00:03:24,710
diremo «console.log» e poi lo faremo,

47
00:03:30,340 --> 00:03:33,140
«console.log (Req.signedCookies)» in modo da vedere ciò che è effettivamente

48
00:03:33,140 --> 00:03:35,790
incluso nel cookie firmato qui.

49
00:03:35,790 --> 00:03:38,070
Ora, anche dopo questo,

50
00:03:38,070 --> 00:03:46,275
quello che faremo sarà dire, «Se (! Req.signedCookies.user)». L'

51
00:03:46,275 --> 00:03:51,635
utente sarà una proprietà che imposteremo

52
00:03:51,635 --> 00:03:54,440
nel cookie firmato come vedrai un

53
00:03:54,440 --> 00:03:57,520
po 'più tardi come imposteremo il cookie firmato.

54
00:03:57,520 --> 00:04:05,600
Quindi, se la richiesta in arrivo non include il campo utente nei cookie firmati,

55
00:04:05,600 --> 00:04:09,640
e quindi ciò significa che l'utente non è stato ancora autorizzato.

56
00:04:09,640 --> 00:04:11,990
Quindi, in questo caso,

57
00:04:11,990 --> 00:04:18,195
quello che faremo è aspettarci che l'utente si autentichi.

58
00:04:18,195 --> 00:04:23,740
Quindi, allora, faremo tutta questa parte qui.

59
00:04:23,740 --> 00:04:27,890
Quindi si noti che lo avevamo già fatto

60
00:04:27,890 --> 00:04:32,105
in precedenza dove stavamo gestendo l'intestazione di autenticazione.

61
00:04:32,105 --> 00:04:34,630
Quindi prenderemo tutta questa parte,

62
00:04:34,630 --> 00:04:41,805
fino a questo «altro» qui e poi includeremo quello qui dentro.

63
00:04:41,805 --> 00:04:48,260
Quindi, essenzialmente, quello che stiamo specificando qui è che,

64
00:04:49,110 --> 00:04:51,750
permettetemi di indentarlo.

65
00:04:51,750 --> 00:04:55,100
Come vedi, sono molto particolare sul mio rientro

66
00:04:55,100 --> 00:04:59,005
perché questo mantiene il codice più facile da leggere.

67
00:04:59,005 --> 00:05:00,740
Quindi all'interno di questo se,

68
00:05:00,740 --> 00:05:04,990
quindi questo è il punto di chiusura del if di questo qui.

69
00:05:04,990 --> 00:05:11,600
Quindi stiamo dicendo che se il cookie firmato non contiene la proprietà dell'utente su di esso,

70
00:05:11,600 --> 00:05:17,960
allora ci aspettiamo che l'utente autorizzi includendo l'intestazione di autorizzazione.

71
00:05:17,960 --> 00:05:20,090
Quindi cercheremo l'intestazione di autorizzazione.

72
00:05:20,090 --> 00:05:22,760
Se l'intestazione di autorizzazione non è disponibile,

73
00:05:22,760 --> 00:05:28,190
allora rifiuteremo semplicemente l'utente e chiederemo

74
00:05:28,190 --> 00:05:34,120
all'utente di inserire il nome utente e la password come abbiamo fatto nell'esercizio precedente.

75
00:05:34,120 --> 00:05:36,600
Se l'intestazione di autorizzazione è inclusa,

76
00:05:36,600 --> 00:05:41,165
allora elaboreremo l'intestazione di autorizzazione proprio come abbiamo fatto prima,

77
00:05:41,165 --> 00:05:44,565
e se l'utente è un utente autorizzato,

78
00:05:44,565 --> 00:05:49,620
ricordare che abbiamo chiamato il prossimo per consentire all'utente di procedere in avanti.

79
00:05:49,620 --> 00:05:51,480
Ora, a questo punto,

80
00:05:51,480 --> 00:05:56,685
quello che faremo è che

81
00:05:56,685 --> 00:06:00,380
diremo, imposteremo il cookie a questo punto.

82
00:06:00,380 --> 00:06:04,725
Quindi questo è dove useremo il cookie res qui.

83
00:06:04,725 --> 00:06:07,880
Si noti che il cookie non esiste,

84
00:06:07,880 --> 00:06:10,125
quindi diremo «res.cookie».

85
00:06:10,125 --> 00:06:15,275
Come puoi vedere, il cookie res stesso prende la stringa del nome del primo valore, la stringa del

86
00:06:15,275 --> 00:06:19,060
valore e le opzioni, le opzioni dei cookie.

87
00:06:19,060 --> 00:06:25,820
Impostare il nome del cookie su valore con le opzioni date e le opzioni sono incluse qui,

88
00:06:25,820 --> 00:06:27,410
alcune opzioni per il cookie qui.

89
00:06:27,410 --> 00:06:31,040
Ho intenzione di utilizzare semplicemente alcune delle opzioni qui.

90
00:06:31,040 --> 00:06:37,500
Quindi diremo, «res.cookie» e poi ho intenzione di impostare il cookie con il nome utente.

91
00:06:37,680 --> 00:06:41,890
Ora nota che questo è il motivo

92
00:06:41,890 --> 00:06:45,400
per cui sto controllando Req.signedCookies.User lassù.

93
00:06:45,400 --> 00:06:51,380
Quindi diremo «res.cookie ('utente',)» e

94
00:06:51,380 --> 00:06:56,290
il campo utente lo imposterò su 'admin' e

95
00:06:56,290 --> 00:07:01,390
poi lo imposterò come cookie firmato.

96
00:07:01,390 --> 00:07:03,725
Quindi dirò «firmato: vero».

97
00:07:03,725 --> 00:07:06,295
Quindi il che significa che il mio parser di cookie farà in modo

98
00:07:06,295 --> 00:07:10,120
che questo cookie venga firmato e configurato.

99
00:07:10,120 --> 00:07:14,290
Quindi questa è l'opzione che ho impostato per il cookie res qui.

100
00:07:14,290 --> 00:07:16,360
Quindi questo includerà

101
00:07:16,360 --> 00:07:22,300
questo particolare nome nel cookie firmato con questo particolare valore.

102
00:07:22,300 --> 00:07:26,160
Quindi questo è il motivo per cui sono in grado di controllare quel valore quassù.

103
00:07:26,160 --> 00:07:27,770
Quindi, se questo non esiste,

104
00:07:27,770 --> 00:07:33,620
ovviamente mi aspetto che l'utente si autentichi utilizzando l'autenticazione di base,

105
00:07:33,620 --> 00:07:36,045
e se l'autenticazione di base ha successo,

106
00:07:36,045 --> 00:07:40,190
allora imposterò il cookie qui e imposterò

107
00:07:40,190 --> 00:07:45,440
il campo cookie nel messaggio di risposta in uscita qui e

108
00:07:45,440 --> 00:07:49,730
questo richiederà il per impostare il cookie sul lato client e quindi

109
00:07:49,730 --> 00:07:55,055
tutte le richieste successive includeranno questo cookie nella richiesta del client.

110
00:07:55,055 --> 00:08:02,085
Quindi è così che sto gestendo il fatto quando il cookie.user non esiste.

111
00:08:02,085 --> 00:08:05,120
Lì. Se esiste,

112
00:08:05,120 --> 00:08:07,765
allora la parte else,

113
00:08:07,765 --> 00:08:11,155
quindi significa che il cookie firmato

114
00:08:11,155 --> 00:08:16,415
esiste già e la proprietà dell'utente è definita su quello,

115
00:08:16,415 --> 00:08:18,255
quindi nell'altro,

116
00:08:18,255 --> 00:08:19,810
quello che controllerò è

117
00:08:19,810 --> 00:08:33,150
se req.signedCookies.User è admin.

118
00:08:33,150 --> 00:08:37,380
Quindi, ciò significa che il cookie firmato contiene le informazioni corrette.

119
00:08:37,380 --> 00:08:39,780
Allora, dirò il prossimo.

120
00:08:39,780 --> 00:08:44,800
Quindi il che significa che consentirai la richiesta di passare attraverso.

121
00:08:46,520 --> 00:08:55,250
In caso contrario, questo cookie non è valido perché non contiene questo valore corretto.

122
00:08:55,250 --> 00:08:57,635
Quindi questo significa che questo è un errore.

123
00:08:57,635 --> 00:08:59,749
Quindi, in questo caso,

124
00:08:59,749 --> 00:09:02,750
diremo che non sei autenticato,

125
00:09:02,750 --> 00:09:12,075
e quindi causeremo semplicemente l'errore in questo punto.

126
00:09:12,075 --> 00:09:15,640
Ora, non abbiamo intenzione di chiedere all'utente per

127
00:09:15,640 --> 00:09:18,585
la sessione perché questo deve essere stato fatto in precedenza.

128
00:09:18,585 --> 00:09:20,870
Ora, normalmente, questo non accadrebbe

129
00:09:20,870 --> 00:09:24,470
perché se il cookie è già impostato sul lato client,

130
00:09:24,470 --> 00:09:27,005
allora deve includere comunque il valore corretto.

131
00:09:27,005 --> 00:09:29,850
Ma per motivi di completezza,

132
00:09:29,850 --> 00:09:35,315
ho anche incluso il controllo degli errori else qui a questo punto. Questo è tutto.

133
00:09:35,315 --> 00:09:38,210
Con questa configurazione, abbiamo trasformato

134
00:09:38,210 --> 00:09:43,710
la nostra applicazione espressa in una che gestisce i cookie qui.

135
00:09:43,710 --> 00:09:48,405
Nota ancora, lascia che richiami la tua attenzione su quello che stiamo facendo qui ancora una volta.

136
00:09:48,405 --> 00:09:50,060
Qui, stiamo controllando per assicurarci

137
00:09:50,060 --> 00:09:54,970
che la proprietà dell'utente nei cookie firmati non esista,

138
00:09:54,970 --> 00:09:57,380
o che il cookie firmato stesso non esista.

139
00:09:57,380 --> 00:10:02,595
Quindi, ci aspetteremo che venga fatta un'autorizzazione di base.

140
00:10:02,595 --> 00:10:04,850
Se l'autorizzazione ha successo,

141
00:10:04,850 --> 00:10:09,860
allora ho intenzione di impostare il cookie utilizzando il res.cookie qui.

142
00:10:09,860 --> 00:10:14,035
Quindi, tutte le richieste successive porteranno comunque il cookie firmato,

143
00:10:14,035 --> 00:10:17,080
quindi controllerò per vedere che il cookie firmato è

144
00:10:17,080 --> 00:10:22,905
un cookie firmato valido e contiene la proprietà utente impostata su admin.

145
00:10:22,905 --> 00:10:25,680
Se lo fa, allora questo è un accesso autorizzato,

146
00:10:25,680 --> 00:10:27,935
quindi permetterà di procedere in avanti.

147
00:10:27,935 --> 00:10:31,920
In caso contrario, allora sollevo un errore a questo punto.

148
00:10:31,920 --> 00:10:39,710
Correzione minore, le nuove versioni di Node.js si aspettano di utilizzare questo come

149
00:10:39,710 --> 00:10:47,500
nuovo buffer.From invece di nuovo Buffer per affrontare alcuni problemi di sicurezza.

150
00:10:47,500 --> 00:10:53,165
Quindi basta correggere questa linea al nuovo buffer.from. Questo è tutto.

151
00:10:53,165 --> 00:10:59,600
Salviamo le modifiche e poi andiamo a guardare la nostra applicazione in quel postino.

152
00:10:59,600 --> 00:11:03,310
Se il server precedente è in esecuzione,

153
00:11:03,310 --> 00:11:06,155
basta interromperlo digitando Control C,

154
00:11:06,155 --> 00:11:09,665
quindi riavviare il server dicendo npm start.

155
00:11:09,665 --> 00:11:13,305
Naturalmente, assicurati che il tuo server MongoDB sia attivo e funzionante.

156
00:11:13,305 --> 00:11:17,140
In caso contrario, il server espresso non verrà avviato correttamente.

157
00:11:17,140 --> 00:11:19,955
Quindi, una volta avviato il server espresso,

158
00:11:19,955 --> 00:11:26,250
andiamo al nostro Postman e proviamo a connetterci al server.

159
00:11:26,250 --> 00:11:30,970
E dimostrerò alcuni aspetti su come vengono gestiti i cookie.

160
00:11:30,970 --> 00:11:32,939
Ora, andando al Postman,

161
00:11:32,939 --> 00:11:35,980
fammi cancellare tutte queste informazioni

162
00:11:35,980 --> 00:11:40,745
dal mio postino e poi inizieremo con le basi.

163
00:11:40,745 --> 00:11:44,265
Quindi fammi provare ad accedere al localhost: 3000/piatti.

164
00:11:44,265 --> 00:11:47,335
Ora, dopo aver cancellato tutto,

165
00:11:47,335 --> 00:11:49,460
invierò la richiesta e salverò.

166
00:11:49,460 --> 00:11:51,150
E così dal lato server,

167
00:11:51,150 --> 00:11:53,600
dice che non sei autenticato.

168
00:11:53,600 --> 00:11:55,365
Quindi, quando guardi l'intestazione,

169
00:11:55,365 --> 00:12:00,350
questo mi sta chiedendo di autenticarmi usando WWW-Authenticate.

170
00:12:00,350 --> 00:12:05,115
Quindi ora, lasciami entrare nell'autorizzazione e quindi impostare l'autorizzazione di base,

171
00:12:05,115 --> 00:12:08,415
quindi imposterò l'autorizzazione come amministratore e quindi la

172
00:12:08,415 --> 00:12:14,200
password, e quindi aggiorna la richiesta in modo che l'intestazione

173
00:12:14,200 --> 00:12:20,090
conterrà ora l'intestazione di autorizzazione qui con le informazioni lì.

174
00:12:20,090 --> 00:12:23,900
E poi lasciami inviare la richiesta Git su questa parte.

175
00:12:23,900 --> 00:12:25,805
Se invio la richiesta Git,

176
00:12:25,805 --> 00:12:34,205
quindi in risposta, vedi che la richiesta Git ha avuto successo.

177
00:12:34,205 --> 00:12:38,300
Nota anche alcune altre cose.

178
00:12:38,300 --> 00:12:41,060
Vedrai che lo stato è 200 OK.

179
00:12:41,060 --> 00:12:50,805
Si noti inoltre che un cookie è stato impostato sul nostro lato client all'interno di Postman qui.

180
00:12:50,805 --> 00:12:53,120
Questo cookie contiene informazioni.

181
00:12:53,120 --> 00:12:55,420
Vedremo i dettagli del biscotto tra un minuto.

182
00:12:55,420 --> 00:12:57,265
Quindi, quando guardi l'intestazione,

183
00:12:57,265 --> 00:13:03,130
vedi nell'intestazione questo valore qui dicendo Set-Cookie,

184
00:13:03,130 --> 00:13:06,165
e quindi queste informazioni che arrivano qui.

185
00:13:06,165 --> 00:13:10,290
Ora, se lo guardi attentamente,

186
00:13:10,290 --> 00:13:13,965
vedrai qualcosa qui dice utente uguale a,

187
00:13:13,965 --> 00:13:18,000
e poi vedi questo valore qui, admin lì.

188
00:13:18,000 --> 00:13:23,845
Quindi, si nota che qualcosa è stato racchiuso all'interno del cookie.

189
00:13:23,845 --> 00:13:26,465
Se si vuole effettivamente esaminare il cookie,

190
00:13:26,465 --> 00:13:30,355
andare qui in Postman e poi fare clic su queste chiavi,

191
00:13:30,355 --> 00:13:37,205
e poi questo vi mostrerà tutti i cookie che sono stati impostati su questo lato client.

192
00:13:37,205 --> 00:13:43,365
Quindi, in particolare, ora permettetemi di cancellare tutti questi altri cookie.

193
00:13:43,365 --> 00:13:48,640
Probabilmente ne ho usati alcuni per qualche altro motivo.

194
00:13:48,640 --> 00:13:51,290
Quindi fammi pulire quei biscotti.

195
00:13:51,290 --> 00:13:53,020
Comunque, se li vedi,

196
00:13:53,020 --> 00:13:54,355
puoi lasciarli li'.

197
00:13:54,355 --> 00:13:56,385
Non e' un grosso problema.

198
00:13:56,385 --> 00:14:00,220
Concentrati specificamente sull'host locale qui,

199
00:14:00,220 --> 00:14:02,620
e poi vedi questo cookie qui.

200
00:14:02,620 --> 00:14:03,780
Basta fare clic sul cookie,

201
00:14:03,780 --> 00:14:08,710
e poi si vede il valore effettivo all'interno del cookie che è memorizzato lì.

202
00:14:08,710 --> 00:14:12,130
Quindi anche la data di scadenza per la configurazione dei cookie qui.

203
00:14:12,130 --> 00:14:15,460
Ora, questo valore sarà esattamente quello che hai visto

204
00:14:15,460 --> 00:14:18,890
nel cookie impostato che è entrato dal lato server.

205
00:14:18,890 --> 00:14:24,620
Ora, questo significa anche che nelle richieste successive che entrano,

206
00:14:24,620 --> 00:14:27,365
quindi anche se cancello la mia autorizzazione,

207
00:14:27,365 --> 00:14:31,010
e anche se rimuovo l'intestazione di autorizzazione,

208
00:14:31,150 --> 00:14:34,225
perché il cookie è stato impostato,

209
00:14:34,225 --> 00:14:37,110
questo cookie è stato impostato sul mio host locale,

210
00:14:37,110 --> 00:14:44,335
ogni richiesta successiva va a questo server includerà questo cookie.

211
00:14:44,335 --> 00:14:51,000
Quindi, anche se non avrei le intestazioni impostate lì,

212
00:14:51,000 --> 00:14:52,285
se invio la richiesta,

213
00:14:52,285 --> 00:14:57,940
noterai che la richiesta Git funziona proprio come prima senza alcun problema, a

214
00:14:57,940 --> 00:15:02,195
causa del fatto che ogni richiesta in uscita includerà automaticamente

215
00:15:02,195 --> 00:15:08,075
questo cookie nella richiesta in uscita dal mio Postman Qui.

216
00:15:08,075 --> 00:15:13,850
Questo dimostra l'uso dei cookie nella nostra applicazione.

217
00:15:13,850 --> 00:15:18,260
Con questo, abbiamo visto come i cookie possono essere

218
00:15:18,260 --> 00:15:22,404
impostati ed elaborati nel nostro server espresso utilizzando il parser di cookie

219
00:15:22,404 --> 00:15:25,330
e come possiamo impostare i cookie firmati.

220
00:15:25,330 --> 00:15:31,390
Questo è un buon momento per fare un commit git con i cookie del messaggio.