1
00:00:03,890 --> 00:00:11,670
Bây giờ chúng tôi đã hiểu được xác thực dựa trên mã thông báo bằng cách sử dụng Token Web JSON,

2
00:00:11,670 --> 00:00:16,035
và cũng hiểu được những lợi thế của việc sử dụng cách tiếp cận này.

3
00:00:16,035 --> 00:00:22,185
Thực tế là chúng tôi đang xây dựng một máy chủ dựa trên Rest API,

4
00:00:22,185 --> 00:00:24,420
trong khóa học này có nghĩa

5
00:00:27,585 --> 00:00:31,410
là xác thực dựa trên JSON Web Token là phù hợp nhất cho máy chủ này mà chúng tôi đang xây dựng.

6
00:00:31,410 --> 00:00:40,585
Vì vậy, chúng ta hãy cập nhật máy chủ API Rest của chúng tôi để sử dụng JSON Web Tokens trong bài tập này.

7
00:00:40,585 --> 00:00:45,755
Để bắt đầu cập nhật máy chủ tại thiết bị đầu cuối

8
00:00:45,755 --> 00:00:51,935
của bạn, trước tiên hãy cài đặt JSON Web Token và mô-đun JWT Node hộ chiếu.

9
00:00:51,935 --> 00:00:56,445
Vì vậy, tại dấu nhắc nhập npm, cài đặt,

10
00:00:56,445 --> 00:01:05,640
hộ chiếu JWT JSON Web Token và trừ đi lưu.

11
00:01:05,640 --> 00:01:15,435
Như bạn có thể thấy, tôi đang sử dụng JSON Web Token 8.3.0 và hộ chiếu JWT 4.0.0 trong khóa học này.

12
00:01:15,435 --> 00:01:23,180
Bây giờ chúng tôi đã hoàn thành quá trình cài đặt chúng ta hãy tiếp tục và cập nhật máy chủ nhanh của chúng tôi.

13
00:01:23,180 --> 00:01:25,700
Đi bây giờ để mã của chúng tôi, chúng

14
00:01:25,700 --> 00:01:30,289
ta hãy thêm vào một tập tin có tên

15
00:01:30,289 --> 00:01:36,335
conflict.js trong thư mục gốc của dự án của chúng tôi.

16
00:01:36,335 --> 00:01:39,455
Bây giờ, tập tin conflict.js này tôi sẽ sử dụng nó

17
00:01:39,455 --> 00:01:43,220
để lưu trữ một số thông tin cấu hình cho máy chủ của chúng tôi.

18
00:01:43,220 --> 00:01:49,790
Bây giờ, đây là một cách tập trung tất cả các cấu hình cho máy chủ của chúng tôi.

19
00:01:49,790 --> 00:01:53,600
Trong tập tin conflict.js này,

20
00:01:53,600 --> 00:01:59,825
cho phép tôi xuất một đối tượng JSON ở đây.

21
00:01:59,825 --> 00:02:02,490
Vì vậy, chúng tôi sẽ nói, SecretKey,

22
00:02:08,510 --> 00:02:11,550
và đây là nơi

23
00:02:19,450 --> 00:02:28,705
tôi sẽ chỉ định khóa bí mật mà tôi sẽ được sử dụng để ký JSON Web Token của tôi,

24
00:02:28,705 --> 00:02:36,700
và cũng cho phép tôi chỉ định một URL Mongo ở đây,

25
00:02:36,700 --> 00:02:41,275
đó sẽ là URL cho

26
00:02:41,275 --> 00:02:51,710
máy chủ MongoDB của tôi localhost 27017.

27
00:02:52,200 --> 00:02:55,060
Một khi chúng tôi đã hoàn thành điều

28
00:02:55,060 --> 00:02:59,260
đó, sau đó chúng tôi sẽ đi đến tập tin authenticate.js,

29
00:02:59,260 --> 00:03:01,780
và trong tập tin authenticate.js chúng tôi

30
00:03:01,780 --> 00:03:10,700
bây giờ sẽ tạo ra chiến lược JWT.

31
00:03:11,250 --> 00:03:16,175
Đây là chiến lược mã thông báo web JSON được cung cấp bởi

32
00:03:16,175 --> 00:03:25,830
mô-đun nút JWT hộ chiếu của chúng tôi mà chúng tôi vừa bao gồm và vì vậy chúng tôi sẽ nói,

33
00:03:26,300 --> 00:03:32,895
hào phóng chiến lược hộ chiếu generativity.strategy.

34
00:03:32,895 --> 00:03:35,370
Điều này sẽ cung cấp cho chúng tôi

35
00:03:35,370 --> 00:03:40,550
một chiến lược dựa trên JSON Web Token để cấu hình mô-đun hộ chiếu của chúng tôi,

36
00:03:40,550 --> 00:03:46,820
sau đó trích xuất JWT, mà tôi

37
00:03:46,820 --> 00:03:53,745
cũng sẽ nhận được từ hộ chiếu JWT.

38
00:03:53,745 --> 00:03:55,935
Chúng tôi sẽ yêu cầu hộ chiếu JWT,

39
00:03:55,935 --> 00:03:59,565
sau đó chúng tôi sẽ nói “Extract JWT.”

40
00:03:59,565 --> 00:04:02,655
Sau đó, chúng ta hãy

41
00:04:02,655 --> 00:04:10,240
nhập mô-đun JSON Web Token

42
00:04:10,240 --> 00:04:12,265
mà chúng tôi vừa cài đặt.

43
00:04:12,265 --> 00:04:15,340
Một khi chúng tôi đã nhập khẩu những điều này, chúng

44
00:04:15,340 --> 00:04:18,370
ta hãy tiếp tục và bắt đầu cấu hình một vài điều.

45
00:04:18,370 --> 00:04:26,205
Cùng với những điều này, hãy để tôi nhập cấu hình mà tôi đã

46
00:04:26,205 --> 00:04:35,840
tạo ra các tập tin config.js mà tôi vừa thêm vào dự án của tôi.

47
00:04:35,840 --> 00:04:40,100
Một khi tôi hoàn thành điều này sau đó cho phép tôi đi trước và

48
00:04:40,100 --> 00:04:45,650
giới thiệu một vài chức năng bổ sung mà tôi sẽ xuất khẩu từ đây.

49
00:04:45,650 --> 00:04:49,200
Chúng ta sẽ nói, Exports.getToken,

50
00:04:55,160 --> 00:05:02,840
chức năng này khi cung cấp với một tham số mà tôi sẽ chỉ đơn giản gọi là người dùng,

51
00:05:02,840 --> 00:05:06,335
đó sẽ là một đối tượng JSON,

52
00:05:06,335 --> 00:05:10,145
điều này sẽ tạo ra mã thông báo và cung cấp cho chúng tôi.

53
00:05:10,145 --> 00:05:16,685
Để tạo mã thông báo, chúng tôi sẽ sử dụng mô-đun jsonwebtoken mà chúng tôi vừa nhập khẩu.

54
00:05:16,685 --> 00:05:22,140
Vì vậy, ở đây chúng ta sẽ nói trở lại JWT.Sign,

55
00:05:23,750 --> 00:05:31,355
điều này giúp chúng ta tạo ra JSON Web Token và do đó bên trong nó sẽ

56
00:05:31,355 --> 00:05:34,430
cho phép tôi cung cấp tải trọng và

57
00:05:34,430 --> 00:05:38,825
tải trọng ở đây đi kèm như tham số ở đây được gọi là người dùng,

58
00:05:38,825 --> 00:05:42,620
và sau đó tham số thứ hai là

59
00:05:42,620 --> 00:05:51,050
bí mật hoặc khóa riêng mà tôi nhận được từ cấu hình. khóa bí mật,

60
00:05:51,050 --> 00:05:55,260
mà tôi vừa cấu hình một chút trước đó.

61
00:05:55,630 --> 00:06:02,835
Chúng tôi có thể cung cấp các tùy chọn bổ sung ở đây.

62
00:06:02,835 --> 00:06:07,055
Một lựa chọn mà tôi sẽ cung cấp cho điều này là-.

63
00:06:07,055 --> 00:06:09,410
Được rồi, để tôi đi đến dòng tiếp theo ở đây,

64
00:06:09,410 --> 00:06:14,160
tùy chọn mà tôi sẽ cung cấp là ExpiResin.

65
00:06:14,530 --> 00:06:20,945
ExpiResin sẽ cho bạn biết jsonwebtoken sẽ có

66
00:06:20,945 --> 00:06:27,185
giá trị bao lâu vì vậy trong trường hợp này tôi nói 3,600 nghĩa là 3,600 giây hoặc khoảng một giờ.

67
00:06:27,185 --> 00:06:32,825
Một giờ sau, bạn sẽ phải gia hạn jsonwebtoken.

68
00:06:32,825 --> 00:06:36,790
Một giờ là đủ dài để chúng tôi có thể kiểm tra ứng dụng của chúng tôi.

69
00:06:36,790 --> 00:06:40,370
Bạn có thể đặt điều này lâu hơn nếu bạn chọn.

70
00:06:40,370 --> 00:06:45,110
Trong một ứng dụng thực sự, bạn có thể đặt điều này là một giá trị lâu hơn nhiều có thể

71
00:06:45,110 --> 00:06:50,075
một vài ngày và mong đợi người dùng để xác thực lại mình mỗi vài ngày.

72
00:06:50,075 --> 00:06:52,670
Bây giờ, chúng tôi cũng sẽ cấu hình

73
00:06:52,670 --> 00:06:58,025
chiến lược dựa trên jsonwebtoken cho ứng dụng hộ chiếu của chúng tôi.

74
00:06:58,025 --> 00:07:02,900
Vì vậy, hãy để tôi khai báo một biến được gọi là opt,

75
00:07:02,900 --> 00:07:12,140
đó là không có gì ngoài các tùy chọn mà tôi sẽ chỉ định cho chiến lược dựa trên JWT của tôi.

76
00:07:12,140 --> 00:07:18,905
Vì vậy, chúng tôi sẽ nói opt JWTFromRequest.

77
00:07:18,905 --> 00:07:22,925
Bây giờ tùy chọn này xác

78
00:07:22,925 --> 00:07:28,580
định cách jsonwebtoken nên được trích xuất từ thông điệp yêu cầu đến.

79
00:07:28,580 --> 00:07:33,755
Đây là nơi chúng tôi sẽ sử dụng chiết xuất JWT.

80
00:07:33,755 --> 00:07:39,290
Điều này trích xuất JWT hỗ trợ các phương pháp khác nhau

81
00:07:39,290 --> 00:07:44,970
để trích xuất thông tin từ tiêu đề.

82
00:07:44,970 --> 00:07:49,580
Nó sẽ nói từ AuthHeader từ AuthHeader như mã thông báo mang,

83
00:07:49,580 --> 00:07:51,510
từ tiêu đề mà lược đồ và vân vân.

84
00:07:51,510 --> 00:07:54,380
Nếu bạn đọc tài liệu, nó sẽ cho

85
00:07:54,380 --> 00:07:58,040
bạn biết nhiều cách khác nhau để trích xuất jsonwebtoken.

86
00:07:58,040 --> 00:08:00,770
Bạn có thể vượt qua mã thông báo trong nội dung

87
00:08:00,770 --> 00:08:04,970
của thông báo yêu cầu đến và sau đó bạn có thể trích xuất nó từ đó,

88
00:08:04,970 --> 00:08:08,255
bạn cũng có thể sử dụng trình trích xuất tùy chỉnh và vân vân.

89
00:08:08,255 --> 00:08:14,180
Trong khóa học này, tôi sẽ sử dụng phương pháp đơn giản nhất được gọi là

90
00:08:14,180 --> 00:08:20,745
từ tiêu đề xác thực như một mã thông báo mang.

91
00:08:20,745 --> 00:08:22,220
Chúng tôi đã quen

92
00:08:22,220 --> 00:08:25,055
thuộc với Tiêu đề xác thực bởi vì chúng tôi đã sử dụng nó với

93
00:08:25,055 --> 00:08:30,440
xác thực cơ bản và xác thực dựa trên cookie trước đó.

94
00:08:30,440 --> 00:08:32,180
Vì vậy, tôi chỉ sẽ sử dụng

95
00:08:32,180 --> 00:08:38,350
cùng một lĩnh vực tiêu đề trong thông điệp yêu cầu để thực hiện jsonwebtoken.

96
00:08:38,350 --> 00:08:45,270
Vì vậy, tôi sẽ nói opt như người mang mã thông báo jsonwebtoken.

97
00:08:45,270 --> 00:08:51,160
Tiếp theo chúng ta sẽ nói opts.SecretorKey,

98
00:08:56,980 --> 00:09:02,795
đây là tham số thứ hai giúp tôi

99
00:09:02,795 --> 00:09:11,670
cung cấp khóa bí mật mà tôi sẽ sử dụng trong chiến lược của tôi cho đăng nhập.

100
00:09:11,670 --> 00:09:15,875
Vì vậy, đó là tùy chọn khác mà tôi sẽ chỉ định ở đây.

101
00:09:15,875 --> 00:09:18,065
Một khi tôi xác định hai,

102
00:09:18,065 --> 00:09:26,390
hãy để tôi xuất khẩu chiến lược hộ chiếu

103
00:09:26,390 --> 00:09:30,680
mà tôi sẽ cấu hình ở đây vì vậy chúng tôi sẽ nói ExportJWTPassport,

104
00:09:30,680 --> 00:09:34,355
sau đó chúng tôi sẽ nói passport.use.

105
00:09:34,355 --> 00:09:37,940
Nhớ lại cách bạn chỉ định chiến lược địa phương trước đó.

106
00:09:37,940 --> 00:09:42,035
Ở đây chúng ta đang xác định chiến lược dựa trên JWT,

107
00:09:42,035 --> 00:09:47,895
sau đó chúng ta sẽ tạo ra một chiến lược JWT mới,

108
00:09:47,895 --> 00:09:51,320
nhớ lại rằng chúng ta vừa nhập khẩu chiến lược JWT

109
00:09:51,320 --> 00:09:56,615
ở đây đó là những gì chúng ta sẽ sử dụng để tạo ra một chiến lược mới.

110
00:09:56,615 --> 00:10:01,235
Chiến lược JWT này có

111
00:10:01,235 --> 00:10:07,675
đối tượng tùy chọn mà tôi vừa tạo ra như là tham số đầu tiên.

112
00:10:07,675 --> 00:10:14,210
Các tùy chọn chiến lược và thứ hai là chức năng xác minh mà tôi cần phải cung cấp,

113
00:10:14,210 --> 00:10:18,050
và do đó, chức năng xác minh tôi sẽ cung cấp nó trong dòng tiếp theo ở đây,

114
00:10:18,050 --> 00:10:28,545
chúng ta sẽ nói FunctionJWT_Payload.

115
00:10:28,545 --> 00:10:33,900
Xong rồi. Vì vậy, khi chức năng này được gọi,

116
00:10:33,900 --> 00:10:39,270
thực hiện là gọi lại được cung cấp bởi hộ chiếu.

117
00:10:39,270 --> 00:10:44,270
Vì vậy, bất cứ khi nào bạn có hộ chiếu mà bạn đang cấu hình với một chiến lược mới,

118
00:10:44,270 --> 00:10:46,750
bạn cần phải cung cấp các tham số thứ hai được thực hiện.

119
00:10:46,750 --> 00:10:48,460
Thông qua tham số đã thực hiện này,

120
00:10:48,460 --> 00:10:52,235
bạn sẽ được chuyển trở lại thông tin cho hộ chiếu mà sau đó nó sẽ

121
00:10:52,235 --> 00:10:57,780
sử dụng để tải mọi thứ vào thông điệp yêu cầu.

122
00:10:57,780 --> 00:11:00,710
Vì vậy, khi hộ chiếu phân tích thư yêu cầu,

123
00:11:00,710 --> 00:11:04,110
nó sẽ sử dụng chiến lược và sau đó trích xuất thông tin,

124
00:11:04,110 --> 00:11:09,540
và sau đó tải nó vào thông điệp yêu cầu của chúng tôi.

125
00:11:09,540 --> 00:11:13,905
Vì vậy, kể từ khi điều này xảy ra là một chức năng,

126
00:11:13,905 --> 00:11:19,795
tôi sẽ chỉ sử dụng một chức năng mũi tên ở đây,

127
00:11:19,795 --> 00:11:22,160
tôi đã nhận được thích các chức năng mũi tên.

128
00:11:22,160 --> 00:11:25,650
Vì vậy, hãy để tôi tạo ra rằng như là một hàm mũi tên ở đây,

129
00:11:25,650 --> 00:11:28,345
và bên trong của chức năng này,

130
00:11:28,345 --> 00:11:30,465
chúng ta sẽ được xác định các chức năng.

131
00:11:30,465 --> 00:11:32,970
Vì vậy, chúng ta làm gì bên trong chức năng?

132
00:11:32,970 --> 00:11:37,420
Hãy để tôi làm một console.log của

133
00:11:38,370 --> 00:11:44,020
JWT trọng tải và sau đó

134
00:11:44,660 --> 00:11:49,995
cho phép tôi chỉ cần đăng xuất các tùy chọn đến ở đây,

135
00:11:49,995 --> 00:11:51,770
các JWT trọng tải Tùy chọn đến đây,

136
00:11:51,770 --> 00:11:55,420
để bạn có thể xem những gì là bên trong trọng tải JWT.

137
00:11:55,420 --> 00:12:04,250
Sau đó, chúng tôi sẽ tìm kiếm một người dùng bằng cách nói user.findone,

138
00:12:04,250 --> 00:12:14,020
và sau đó tôi biết rằng trong jwt.payload,

139
00:12:14,020 --> 00:12:17,210
có một lĩnh vực ID đi kèm.

140
00:12:17,210 --> 00:12:21,360
Vì vậy, đó là những gì tôi sẽ được gán là lĩnh vực ID ở đây.

141
00:12:21,360 --> 00:12:26,040
Vì vậy, tôi sẽ nói, user.Findone và thứ hai

142
00:12:26,040 --> 00:12:36,190
là một chức năng gọi lại.

143
00:12:36,870 --> 00:12:45,295
Như bạn nhận ra, người dùng này Mongoose phương pháp và bạn cố gắng tìm.

144
00:12:45,295 --> 00:12:54,665
Vì vậy, chúng tôi sẽ nói nếu sai lầm sau đó, trở lại xong.

145
00:12:54,665 --> 00:12:57,945
Chuyện này đã làm gì? Điều này thực hiện là gọi lại

146
00:12:57,945 --> 00:13:02,155
hộ chiếu sẽ vượt qua vào chiến lược của bạn ở đây.

147
00:13:02,155 --> 00:13:04,965
Vì vậy, chúng ta sẽ được gọi là chức năng thực hiện này.

148
00:13:04,965 --> 00:13:11,200
Điều này được thực hiện trong hộ chiếu có ba thông số.

149
00:13:12,890 --> 00:13:20,400
Vì vậy, bạn có thể thấy ba mẩu thông tin này thực hiện mong đợi nó nói, lỗi: bất kỳ.

150
00:13:20,400 --> 00:13:24,525
Vì vậy, nếu bạn có một lỗi, bạn sẽ vượt qua nó như là tham số đầu tiên.

151
00:13:24,525 --> 00:13:26,495
Tham số thứ hai, người dùng? ,

152
00:13:26,495 --> 00:13:28,245
Nếu một người dùng tồn tại,

153
00:13:28,245 --> 00:13:33,770
sau đó giá trị người dùng sẽ được thông qua và sau đó nếu có thông tin? :, bất kỳ.

154
00:13:33,770 --> 00:13:37,100
Vì vậy, hai là các tham số tùy chọn và vì vậy,

155
00:13:37,100 --> 00:13:38,690
nếu bạn vượt qua bất kỳ thông tin nào,

156
00:13:38,690 --> 00:13:42,145
thì điều đó sẽ được sử dụng trong ứng dụng.

157
00:13:42,145 --> 00:13:44,650
Nếu tôi vượt qua sai là tham số thứ hai,

158
00:13:44,650 --> 00:13:47,515
thì điều đó có nghĩa là người dùng không tồn tại hoặc đó.

159
00:13:47,515 --> 00:13:50,810
Vì vậy, nó sẽ giải thích rằng người dùng không tồn tại.

160
00:13:50,810 --> 00:13:52,335
Vì vậy, tôi có thể nói, sai,

161
00:13:52,335 --> 00:13:54,900
sai, bởi vì đây là một lỗi.

162
00:13:54,900 --> 00:13:58,080
Vì vậy, tôi sẽ không đi qua một giá trị người dùng ở đó,

163
00:13:58,080 --> 00:14:00,660
tôi chỉ đi qua sai.

164
00:14:00,660 --> 00:14:06,040
Ở đó, tiếp theo,

165
00:14:06,040 --> 00:14:11,510
chúng ta có thể nói, nếu không (người dùng).

166
00:14:11,510 --> 00:14:15,860
Vì vậy, nếu người dùng không phải là null,

167
00:14:15,860 --> 00:14:18,960
chúng ta sẽ nói return done (null).

168
00:14:19,230 --> 00:14:22,210
Không có lỗi vì vậy, tham số đầu tiên sẽ là

169
00:14:22,210 --> 00:14:25,080
null và tham số thứ hai là người dùng,

170
00:14:25,080 --> 00:14:29,895
nhưng chúng tôi chỉ nhận được từ MongoDB.

171
00:14:29,895 --> 00:14:35,445
Nếu không, chúng tôi sẽ trở lại

172
00:14:35,445 --> 00:14:41,395
thực hiện với null, false.

173
00:14:41,395 --> 00:14:43,650
Vì vậy, trong trường hợp cuối cùng,

174
00:14:43,650 --> 00:14:45,100
chúng tôi không thể tìm thấy người dùng,

175
00:14:45,100 --> 00:14:47,120
vì vậy chúng tôi sẽ đi qua sai.

176
00:14:47,120 --> 00:14:50,200
Vì vậy, chúng ta sẽ xử lý nó như thế này.

177
00:14:50,200 --> 00:14:53,345
Nếu bạn muốn, bạn có thể tạo một tài khoản người dùng mới tại thời điểm này

178
00:14:53,345 --> 00:14:58,365
nhưng tôi sẽ giữ cho điều này đơn giản chỉ để nó dễ dàng cho chúng tôi để hiểu.

179
00:14:58,365 --> 00:15:00,810
Vì vậy, chúng tôi sẽ chỉ nói, null, false. Đó là sáu.

180
00:15:00,810 --> 00:15:07,475
Vì vậy, đây là chiến lược hộ chiếu JsonWebToken mà tôi vừa cấu hình ở đây.

181
00:15:07,475 --> 00:15:11,420
Ngoài ra, hãy để tôi xuất

182
00:15:11,420 --> 00:15:19,450
thêm một chức năng từ đây gọi là VerifyUser.

183
00:15:19,450 --> 00:15:21,110
Bây giờ, chức năng VerifyUser này,

184
00:15:21,110 --> 00:15:24,935
tôi sẽ sử dụng nó để xác minh một người dùng đến.

185
00:15:24,935 --> 00:15:28,810
Vì vậy, đây là nơi tôi sẽ sử dụng passport.authenticate.

186
00:15:28,890 --> 00:15:36,440
Vì vậy, passport.authenticate, chiến lược là chiến lược jwt mà tôi vừa cấu hình,

187
00:15:36,440 --> 00:15:39,490
chiến lược JsonWebToken mà tôi vừa cấu hình.

188
00:15:39,490 --> 00:15:41,625
Sau đó, phần thứ hai,

189
00:15:41,625 --> 00:15:46,305
tôi sẽ nói, phiên: false.

190
00:15:46,305 --> 00:15:47,740
Vì vậy, điều đó có nghĩa là,

191
00:15:47,740 --> 00:15:51,305
chúng ta sẽ không được tạo ra các phiên trong trường hợp này.

192
00:15:51,305 --> 00:15:58,215
Như bạn nhớ lại, một ứng dụng nghịch đảo,

193
00:15:58,215 --> 00:16:00,530
chúng tôi đang sử dụng xác thực dựa trên Token.

194
00:16:00,530 --> 00:16:02,435
Vì vậy, chúng ta sẽ không tạo ra các phiên.

195
00:16:02,435 --> 00:16:07,690
Vì vậy, đó là lý do tại sao tôi thiết lập phiên tùy chọn này để sai ở đây

196
00:16:07,690 --> 00:16:11,795
, và tất nhiên, người đầu tiên chỉ định chiến lược mà tôi sẽ được sử dụng.

197
00:16:11,795 --> 00:16:14,050
Vì vậy, để xác minh một người dùng,

198
00:16:14,050 --> 00:16:15,930
tôi sẽ sử dụng chiến lược JWT.

199
00:16:15,930 --> 00:16:18,110
Chiến lược JWT hoạt động như thế nào?

200
00:16:18,110 --> 00:16:20,540
Trong yêu cầu đến,

201
00:16:21,040 --> 00:16:26,845
mã thông báo sẽ được bao gồm trong tiêu đề xác thực như chúng ta đã thấy ở đây.

202
00:16:26,845 --> 00:16:29,950
Chúng tôi nói tiêu đề xác thực như mã thông báo mang.

203
00:16:29,950 --> 00:16:33,530
Nếu nó được bao gồm, sau đó nó sẽ được trích xuất và nó sẽ được

204
00:16:33,530 --> 00:16:38,210
sử dụng để xác thực người dùng dựa trên mã thông báo.

205
00:16:38,210 --> 00:16:47,770
Chỉnh sửa nhỏ ở đây, điều này nên là user.findone_id bằng jwt_payload. _id,

206
00:16:47,770 --> 00:16:56,475
bởi vì đó là giá trị id nằm trong tải trọng của JsonWebToken của tôi.

207
00:16:56,475 --> 00:17:01,615
Vì vậy, chúng tôi đang tìm kiếm người dùng với ID đã cho.

208
00:17:01,615 --> 00:17:06,170
Vì vậy, một khi chúng ta đã hoàn thành điều này, thì bây giờ,

209
00:17:06,170 --> 00:17:11,790
phần thứ hai mà chúng ta cần làm là chúng ta cần tạo ra mã thông báo ở đâu đó.

210
00:17:11,790 --> 00:17:14,005
Bây giờ, chúng ta tạo ra mã thông báo ở đâu?

211
00:17:14,005 --> 00:17:20,290
Vì vậy, đây là nơi mà một cái gì đó mà chúng tôi đang làm trong tập tin users.js là rất hữu ích cho chúng tôi.

212
00:17:20,290 --> 00:17:22,270
Trong tệp users.js,

213
00:17:22,270 --> 00:17:27,180
nhớ lại rằng bạn đã có điểm cuối này gọi là đăng nhập.

214
00:17:27,180 --> 00:17:28,700
Trong điểm cuối đăng nhập,

215
00:17:28,700 --> 00:17:33,410
bạn đã sử dụng tên người dùng và mật khẩu để xác thực người dùng.

216
00:17:33,410 --> 00:17:38,030
Vì vậy, ngay cả với JsonWebToken để phát hành JsonWebToken,

217
00:17:38,030 --> 00:17:41,959
trước tiên bạn cần phải xác thực người dùng bằng cách sử dụng một trong các chiến lược khác,

218
00:17:41,959 --> 00:17:44,630
và nếu bạn đang sử dụng chiến lược cục bộ đầu tiên,

219
00:17:44,630 --> 00:17:49,715
chúng tôi sẽ xác thực người dùng bằng cách sử dụng tên người dùng và mật khẩu.

220
00:17:49,715 --> 00:17:53,415
Một khi người dùng được xác thực với tên người dùng và mật khẩu,

221
00:17:53,415 --> 00:17:55,885
sau đó chúng tôi sẽ phát hành mã thông báo cho người dùng nói,

222
00:17:55,885 --> 00:17:57,330
“Được rồi, bạn là người dùng hợp lệ,

223
00:17:57,330 --> 00:17:58,630
tôi sẽ cung cấp cho bạn mã thông báo”.

224
00:17:58,630 --> 00:18:02,390
Tất cả các yêu cầu tiếp theo sẽ chỉ đơn giản mang mã thông báo

225
00:18:02,390 --> 00:18:06,860
trong tiêu đề của thông báo yêu cầu đến.

226
00:18:06,860 --> 00:18:10,415
Vì vậy, trước đó, chúng tôi đã sử dụng để tạo ra các phiên.

227
00:18:10,415 --> 00:18:11,840
Khi người dùng được xác thực,

228
00:18:11,840 --> 00:18:13,935
chúng tôi sẽ không sử dụng phiên nữa.

229
00:18:13,935 --> 00:18:17,640
Thay vào đó, khi người dùng được xác thực bằng cách sử dụng chiến lược cục bộ,

230
00:18:17,640 --> 00:18:20,110
chúng tôi sẽ phát hành một mã thông báo cho người dùng.

231
00:18:20,110 --> 00:18:25,955
Vì vậy, bên trong phương pháp Router.post này mà chúng tôi đã thực hiện trên đó /login terminal,

232
00:18:25,955 --> 00:18:31,730
Tôi sẽ tạo ra một mã thông báo và vượt qua mã thông báo này trở lại cho người dùng.

233
00:18:31,730 --> 00:18:36,980
Vì vậy, ở đây, chúng ta sẽ nói một Router.Post.

234
00:18:38,550 --> 00:18:40,785
Để tôi tạo ra một mã thông báo.

235
00:18:40,785 --> 00:18:42,630
Để tạo một mã thông báo,

236
00:18:42,630 --> 00:18:50,150
chúng ta có hàm này trong mô-đun xác thực gọi là Authenticate.getToken.

237
00:18:51,250 --> 00:18:54,325
Vì vậy, nhớ lại, rằng chúng tôi đã có,

238
00:18:54,325 --> 00:18:57,050
để tận dụng điều đó tất nhiên,

239
00:18:57,050 --> 00:18:59,210
ngay cả trước khi chúng tôi bắt đầu có,

240
00:18:59,210 --> 00:19:02,750
tôi cần phải nhập chứng thực.

241
00:19:05,940 --> 00:19:17,720
Mô-đun ở đây. Vì vậy, chúng tôi sẽ nói xác thực yêu cầu. /authenticate.

242
00:19:18,000 --> 00:19:26,740
Vì vậy, sau đó, khi trong mã của bạn ở đây,

243
00:19:26,740 --> 00:19:29,270
bây giờ chúng ta có thể nói Authenticate.GetToken,

244
00:19:31,530 --> 00:19:37,585
và GetToken mất tham số ở đây.

245
00:19:37,585 --> 00:19:41,875
Bây giờ, nhớ lại, quay lại tập tin authenticate.js.

246
00:19:41,875 --> 00:19:46,665
Tệp authenticate.js có một tham số ở đây

247
00:19:46,665 --> 00:19:53,105
sẽ được sử dụng làm trọng tải khi bạn đang tạo JsonWebToken.

248
00:19:53,105 --> 00:19:55,785
Vì vậy, trong tập tin users.js,

249
00:19:55,785 --> 00:19:59,230
tôi sẽ tạo ra một mã thông báo bằng cách đưa ra một trọng tải,

250
00:19:59,230 --> 00:20:02,890
chỉ chứa ID của người dùng.

251
00:20:02,890 --> 00:20:06,070
Vì vậy, chúng ta sẽ nói id: req.user.

252
00:20:06,740 --> 00:20:11,940
Đó là đủ để tạo JsonWebToken.

253
00:20:11,940 --> 00:20:15,315
Chúng tôi không muốn bao gồm bất kỳ thông tin nào khác của người dùng.

254
00:20:15,315 --> 00:20:18,690
Nếu bạn chọn, bạn có thể bao gồm các phần khác của thông tin người dùng,

255
00:20:18,690 --> 00:20:21,715
nhưng tôi sẽ đề nghị rằng giữ JsonWebToken nhỏ.

256
00:20:21,715 --> 00:20:25,700
ID người dùng là đủ vì nếu bạn cần tìm kiếm người dùng,

257
00:20:25,700 --> 00:20:32,840
ID người dùng là đủ để tìm kiếm trong MongoDB cho người dùng.

258
00:20:32,840 --> 00:20:39,230
Vì vậy, tôi sẽ chỉ mã hóa ID của người dùng ở đây.

259
00:20:39,230 --> 00:20:44,930
Bây giờ, bạn biết rằng req.user sẽ có mặt,

260
00:20:44,930 --> 00:20:50,530
bởi vì khi passport.authenticate ('địa phương') xác thực thành công người dùng,

261
00:20:50,530 --> 00:20:54,650
điều này sẽ tải lên tài sản người dùng vào thông báo yêu cầu.

262
00:20:54,650 --> 00:20:57,300
Vì vậy, đó là lý do tại sao tôi có thể làm điều này ở đây.

263
00:20:57,300 --> 00:21:01,830
Vì vậy, đây là những gì tôi sẽ sử dụng để tạo mã thông báo.

264
00:21:01,900 --> 00:21:05,120
Bây giờ, một khi mã thông báo được tạo ra,

265
00:21:05,120 --> 00:21:09,720
tôi muốn chuyển mã thông báo này trở lại cho người dùng.

266
00:21:09,720 --> 00:21:15,715
Vì vậy, trong đối tượng rest.json mà tôi đang cung cấp ở đây,

267
00:21:15,715 --> 00:21:21,755
tôi đã mang cờ thành công và cũng có thể,

268
00:21:21,755 --> 00:21:23,855
một thông báo trạng thái ở đây.

269
00:21:23,855 --> 00:21:28,270
Hãy để tôi thêm vào mã thông báo

270
00:21:28,270 --> 00:21:34,880
như là một trong những thuộc tính trong thư trả lời ở đây.

271
00:21:36,480 --> 00:21:39,475
Vì vậy, mã thông báo mà tôi vừa tạo ra,

272
00:21:39,475 --> 00:21:47,595
tôi sẽ vượt qua này trở lại như là tài sản thứ hai bên trong chuỗi Json này ở đây.

273
00:21:47,595 --> 00:21:55,370
Vì vậy, bây giờ, khi khách hàng của tôi nhận được chuỗi Json này trong cơ thể của thông điệp trả lời,

274
00:21:55,370 --> 00:21:59,870
nó có thể đi vào và trích xuất mã thông báo từ đó.

275
00:22:00,140 --> 00:22:05,500
Đó là nó. Vì vậy, bây giờ chúng tôi đã cập nhật các tập tin users.js,

276
00:22:05,500 --> 00:22:08,630
và bây giờ bạn có thể thấy cách mã thông báo sẽ được

277
00:22:08,630 --> 00:22:12,690
tạo ra và gửi lại cho người dùng khi người dùng được xác thực thành công.

278
00:22:12,690 --> 00:22:16,330
Bây giờ, chương trình này cũng có thể được sử dụng

279
00:22:16,330 --> 00:22:21,250
khi bạn sử dụng xác thực của bên thứ ba như dựa trên OAuth 2.0,

280
00:22:21,250 --> 00:22:23,525
mà chúng tôi sẽ kiểm tra trong mô-đun tiếp theo.

281
00:22:23,525 --> 00:22:25,695
Bây giờ, thủ tục sẽ tương tự.

282
00:22:25,695 --> 00:22:28,880
Bạn sẽ tạo một mã thông báo khi người dùng được xác thực bởi

283
00:22:28,880 --> 00:22:32,560
nhà cung cấp xác thực của bên thứ ba hoặc OAuth,

284
00:22:32,560 --> 00:22:35,640
và sau đó bạn sẽ chuyển mã thông báo trở lại cho người dùng, theo

285
00:22:35,640 --> 00:22:39,010
cách tiếp cận tương tự như bạn thấy ở đây.

286
00:22:39,010 --> 00:22:41,285
Bây giờ, một khi chúng tôi đã làm điều này,

287
00:22:41,285 --> 00:22:44,255
sau đó chúng tôi đi đến tập tin app.js.

288
00:22:44,255 --> 00:22:53,660
Trong tập tin app.js, bởi vì chúng tôi đã bao gồm một tập tin cấu hình ở đây.

289
00:22:53,660 --> 00:22:59,005
Vì vậy, hãy để tôi yêu cầu các tập tin cấu hình ở đây,

290
00:22:59,005 --> 00:23:06,465
và sau đó URL mà tôi đang sử dụng ở đây thay vì hardcoding URL này,

291
00:23:06,465 --> 00:23:11,345
tôi sẽ nói config.mongourl.

292
00:23:11,345 --> 00:23:16,680
Vì vậy, bây giờ, bạn thấy cách tập tin config.js của tôi có thể được sử dụng như

293
00:23:16,680 --> 00:23:23,520
một nơi tập trung, nơi tôi có thể chuẩn bị cấu hình cho ứng dụng của tôi.

294
00:23:23,520 --> 00:23:29,200
Đó là nó. Vì vậy, những gì xảy ra bây giờ là khi người dùng

295
00:23:29,200 --> 00:23:35,010
authenticates trên điểm cuối /login và người dùng được xác thực thành công,

296
00:23:35,010 --> 00:23:40,840
sau đó mã thông báo sẽ được tạo ra bởi máy chủ và gửi lại cho khách hàng hoặc người dùng.

297
00:23:40,840 --> 00:23:43,765
Vì vậy, khách hàng sẽ bao gồm mã thông báo trong

298
00:23:43,765 --> 00:23:47,765
mọi yêu cầu đến tiếp theo trong tiêu đề ủy quyền.

299
00:23:47,765 --> 00:23:50,590
Bây giờ, làm thế nào để nó bao gồm tiêu đề ủy quyền?

300
00:23:50,590 --> 00:23:54,220
Hãy quay trở lại authentic.js và ở đây,

301
00:23:54,220 --> 00:24:01,625
bạn thấy rằng chúng tôi đã nói ExtractJWt.FromAuthHeaderasBearerToken đây.

302
00:24:01,625 --> 00:24:06,290
Vì vậy, điều này sẽ được bao gồm trong tiêu đề xác thực như một mã thông báo mang.

303
00:24:06,290 --> 00:24:08,385
Tôi sẽ cho bạn thấy làm thế nào điều này được thực hiện,

304
00:24:08,385 --> 00:24:15,535
sau đó chúng tôi sử dụng người đưa thư để bao gồm mã thông báo người mang vào tiêu đề xác thực.

305
00:24:15,535 --> 00:24:17,690
Bây giờ, khi điều này đi vào,

306
00:24:17,690 --> 00:24:21,060
sau đó bạn nhớ lại rằng ngay dưới đây,

307
00:24:21,060 --> 00:24:25,095
bạn đã cấu hình phương pháp này ở đây gọi là VerifyUser,

308
00:24:25,095 --> 00:24:30,635
mà kêu gọi chứng thực hộ chiếu với JWT.

309
00:24:30,635 --> 00:24:34,460
Vì vậy, điều này sử dụng mã thông báo

310
00:24:34,460 --> 00:24:38,620
đi kèm trong tiêu đề xác thực và sau đó xác minh người dùng.

311
00:24:38,620 --> 00:24:41,980
Vì vậy, bất cứ lúc nào tôi muốn xác minh tính xác thực của người dùng,

312
00:24:41,980 --> 00:24:43,855
tôi chỉ có thể gọi xác minh người dùng,

313
00:24:43,855 --> 00:24:49,115
và điều đó sẽ bắt đầu cuộc gọi đến passport.authenticate và xác minh sser.

314
00:24:49,115 --> 00:24:50,315
Nếu điều này thành công,

315
00:24:50,315 --> 00:24:51,800
nó sẽ cho phép tôi tiếp tục.

316
00:24:51,800 --> 00:24:55,620
Thủ tục này rất giống với những gì bạn đã làm trong

317
00:24:55,620 --> 00:25:01,610
tập tin users.js nơi bạn gọi cùng passport.authenticate ('địa phương').

318
00:25:01,720 --> 00:25:04,320
Vì vậy, nếu điều này là thành công,

319
00:25:04,320 --> 00:25:05,885
sau đó bạn đi về phía trước.

320
00:25:05,885 --> 00:25:10,930
Nếu nó không thành công, chức năng xác thực sẽ trả

321
00:25:10,930 --> 00:25:16,050
lại thông báo lỗi cho khách hàng nói rằng người dùng không được ủy quyền.

322
00:25:16,050 --> 00:25:18,345
Vì vậy, điều đó đã được thực hiện chăm sóc.

323
00:25:18,345 --> 00:25:23,020
Vì vậy, bây giờ, rằng chúng tôi đã bao gồm điều này vào tập tin authenticate.js của tôi,

324
00:25:23,020 --> 00:25:26,050
bất kỳ nơi nào mà tôi muốn xác minh người dùng,

325
00:25:26,050 --> 00:25:27,480
tôi chỉ có thể gọi đến

326
00:25:27,480 --> 00:25:31,210
chức năng VerifyUser này mà

327
00:25:31,210 --> 00:25:34,320
tôi đã chỉ định ở đây hoặc xuất khẩu mà tôi đã chỉ định ở đây,

328
00:25:34,320 --> 00:25:37,220
mà chúng tôi sẽ gọi khi passport.authenticate sử dụng

329
00:25:37,220 --> 00:25:40,540
chiến lược JWT để xác thực người dùng.

330
00:25:40,540 --> 00:25:42,440
Bây giờ, làm thế nào để chúng ta sử dụng nó?

331
00:25:42,440 --> 00:25:47,785
Bây giờ, những gì chúng ta sẽ làm là chúng ta sẽ đi vào mỗi bộ định tuyến của chúng ta,

332
00:25:47,785 --> 00:25:56,945
và kiểm soát các tùy chọn trên tất cả các tuyến đường mà chúng ta muốn điều khiển.

333
00:25:56,945 --> 00:26:00,300
Vì vậy, quay trở lại tập tin app.js, bây giờ,

334
00:26:00,300 --> 00:26:07,925
rằng chúng tôi không sử dụng phiên tôi sẽ loại bỏ phiên này từ đây,

335
00:26:07,925 --> 00:26:10,150
bởi vì chúng tôi không còn sử dụng phiên nữa.

336
00:26:10,150 --> 00:26:14,990
Tương tự như vậy, tôi sẽ loại bỏ passport.session này từ đây cũng.

337
00:26:14,990 --> 00:26:17,580
Điều đó cũng không cần thiết.

338
00:26:17,580 --> 00:26:20,430
Ngoài ra, xác thực này, xem trước đó,

339
00:26:20,430 --> 00:26:21,940
khi tôi cấu hình xác thực này, xác

340
00:26:21,940 --> 00:26:25,490
thực này đã được áp dụng cho mỗi yêu cầu đến duy nhất.

341
00:26:25,490 --> 00:26:28,705
Bây giờ, tôi sẽ thay đổi ứng dụng của tôi,

342
00:26:28,705 --> 00:26:35,055
theo đó tôi sẽ yêu cầu xác thực chỉ trên các tuyến đường nhất định và không phải trên tất cả các tuyến đường.

343
00:26:35,055 --> 00:26:39,665
Vì vậy, hãy để tôi loại bỏ xác thực này hoàn toàn từ app.js.

344
00:26:39,665 --> 00:26:41,995
Vì vậy, bây giờ, khi yêu cầu đi vào,

345
00:26:41,995 --> 00:26:45,850
nếu nó là trên/điểm cuối,

346
00:26:45,850 --> 00:26:47,080
chỉ số sẽ được phục vụ.

347
00:26:47,080 --> 00:26:52,040
Nếu nó là trên /users điểm cuối nó sẽ cho phép bạn điều hướng đến

348
00:26:52,040 --> 00:26:57,815
các tuyến đường khác nhau được gắn vào /users trong users.js,

349
00:26:57,815 --> 00:27:00,900
và sau đó, phần còn lại của những tuyến đường khác nhau.

350
00:27:00,900 --> 00:27:03,420
Những gì tôi sẽ làm bây giờ là tôi sẽ để lại

351
00:27:03,420 --> 00:27:07,250
thư mục công cộng mở cho bất cứ ai để truy cập.

352
00:27:07,250 --> 00:27:09,145
Bây giờ, trong nhiều ứng dụng,

353
00:27:09,145 --> 00:27:10,665
điều này có thể là tốt.

354
00:27:10,665 --> 00:27:13,045
Vì vậy, tôi sẽ để nó mở ra.

355
00:27:13,045 --> 00:27:14,825
Bây giờ, trên các món ăn,

356
00:27:14,825 --> 00:27:17,920
chương trình khuyến mãi, và điểm cuối của các nhà lãnh đạo,

357
00:27:17,920 --> 00:27:20,875
tất cả các yêu cầu nhận được.

358
00:27:20,875 --> 00:27:28,205
Tôi sẽ để những người được trả lời mà không yêu cầu bất kỳ xác thực nào.

359
00:27:28,205 --> 00:27:30,200
Bây giờ tại sao tôi lại muốn làm điều đó?

360
00:27:30,200 --> 00:27:33,190
Nếu một người dùng đang thực hiện một yêu cầu nhận được,

361
00:27:33,190 --> 00:27:35,455
người dùng chỉ muốn truy xuất thông tin.

362
00:27:35,455 --> 00:27:40,490
Vì vậy, ví dụ, ở phía khách hàng nếu tôi đang thực hiện một ứng dụng web bằng cách sử dụng Angular

363
00:27:40,490 --> 00:27:46,290
hoặc một ứng dụng khách hàng sử dụng Ionic hoặc kịch bản gốc,

364
00:27:46,290 --> 00:27:49,920
sau đó có lẽ tôi muốn thực hiện ứng dụng của tôi trong

365
00:27:49,920 --> 00:27:54,310
một cách mà các trang chính sẽ hiển thị thông tin đã,

366
00:27:54,310 --> 00:27:57,715
các thông tin di truyền mà bạn muốn cung cấp cho bất kỳ ai

367
00:27:57,715 --> 00:28:01,590
truy cập trang web của bạn hoặc mở ứng dụng của bạn.

368
00:28:01,590 --> 00:28:04,360
Vì vậy, thông tin cơ bản có thể được hiển thị ở đó.

369
00:28:04,360 --> 00:28:08,060
Nhưng nếu bạn muốn thay đổi bất cứ điều gì,

370
00:28:08,060 --> 00:28:12,110
sau đó bạn mong đợi người dùng được xác thực.

371
00:28:12,110 --> 00:28:16,255
Vì vậy, bạn sẽ cho phép các hoạt động POST, đặt các hoạt động

372
00:28:16,255 --> 00:28:21,110
và xóa các hoạt động chỉ được thực hiện bởi người dùng xác thực.

373
00:28:21,110 --> 00:28:23,605
Tương tự như vậy, ví dụ như nhận xét,

374
00:28:23,605 --> 00:28:30,280
bạn có thể nói rằng nhận xét chỉ có thể được đăng hoặc sửa đổi bởi người dùng xác thực.

375
00:28:30,280 --> 00:28:34,570
Vì vậy, bạn có thể hạn chế chỉ một số tuyến đường cho người dùng xác thực,

376
00:28:34,570 --> 00:28:37,940
các tuyến đường khác bạn có thể để chúng mở. Làm thế nào để chúng ta làm được điều đó?

377
00:28:37,940 --> 00:28:41,180
Bây giờ đây là nơi người dùng xác minh rằng chúng tôi

378
00:28:41,180 --> 00:28:45,055
đã xuất khẩu từ tập tin authenticate.js có ích.

379
00:28:45,055 --> 00:28:49,460
Bây giờ thay vì kiểm soát tất cả các điểm kết thúc,

380
00:28:49,460 --> 00:28:53,190
tất cả các hoạt động khác nhau trên các món ăn, chương trình khuyến mãi

381
00:28:53,190 --> 00:28:54,740
và các nhà lãnh đạo trong các điểm,

382
00:28:54,740 --> 00:28:58,240
chúng tôi sẽ chỉ mở các hoạt động get cho bất kỳ ai

383
00:28:58,240 --> 00:29:00,830
, nhưng các

384
00:29:00,830 --> 00:29:04,995
hoạt động post, put và delete sẽ bị hạn chế chỉ cho người dùng xác thực.

385
00:29:04,995 --> 00:29:10,350
Trong nhiệm vụ, bạn sẽ thêm vào một thể loại khác của người dùng được gọi là người dùng quản trị.

386
00:29:10,350 --> 00:29:15,320
Bây giờ bạn sẽ hạn chế các hoạt động nhất định chỉ được thực hiện bởi người dùng quản trị.

387
00:29:15,320 --> 00:29:18,460
Vì vậy, ví dụ, sửa đổi các món ăn

388
00:29:18,460 --> 00:29:22,530
hoặc xóa các món ăn thông tin từ cơ sở dữ liệu,

389
00:29:22,530 --> 00:29:24,600
sẽ chỉ bị hạn chế cho người dùng quản trị.

390
00:29:24,600 --> 00:29:30,000
Nhưng người dùng cơ bản có thể đăng bình luận,

391
00:29:30,000 --> 00:29:32,470
sửa đổi các nhận xét mà họ đã đăng,

392
00:29:32,470 --> 00:29:35,450
và thậm chí có thể lưu một số món ăn yêu thích.

393
00:29:35,450 --> 00:29:38,520
Chúng ta sẽ làm phần đó trong mô-đun thứ tư.

394
00:29:38,520 --> 00:29:42,735
Vậy làm thế nào để chúng ta kiểm soát các tuyến đường cụ thể?

395
00:29:42,735 --> 00:29:46,210
Vì vậy, đây là nơi chúng ta phải đi vào mỗi bộ định tuyến

396
00:29:46,210 --> 00:29:50,365
và sau đó nhập khẩu điều khiển trên các tuyến đường cụ thể.

397
00:29:50,365 --> 00:29:53,945
Vì vậy, chúng ta hãy bắt đầu với các món ăn tuyến đường.

398
00:29:53,945 --> 00:29:55,770
Vì vậy, đối với các món ăn tuyến đường,

399
00:29:55,770 --> 00:29:59,950
bạn sẽ nhớ lại rằng điều này được kiểm soát trong tập tin dishRouter.js.

400
00:29:59,950 --> 00:30:02,515
Vì vậy, đi đến dishRouter.js,

401
00:30:02,515 --> 00:30:07,450
trước tiên chúng ta hãy nhập xác thực ở đây.

402
00:30:07,450 --> 00:30:13,400
Vì vậy, chúng ta sẽ nói, const authenticate

403
00:30:17,010 --> 00:30:24,700
yêu cầu../authenticate vì

404
00:30:24,700 --> 00:30:29,110
tập tin authenticator.js này nằm trong thư mục cấp cao hơn.

405
00:30:29,110 --> 00:30:32,105
Vì vậy, hãy nhớ../xác thực ở đây.

406
00:30:32,105 --> 00:30:34,505
Vì vậy, một khi bạn nhập chứng thực,

407
00:30:34,505 --> 00:30:37,965
cho tuyến đường bộ định tuyến món ăn cho tuyến đường này,

408
00:30:37,965 --> 00:30:42,560
các hoạt động get, tôi sẽ cho phép mà không có bất kỳ vấn đề.

409
00:30:42,560 --> 00:30:44,820
Vì vậy, đó là mở cửa.

410
00:30:44,820 --> 00:30:47,025
Vì vậy, tôi sẽ không áp đặt bất kỳ hạn chế nào.

411
00:30:47,025 --> 00:30:51,750
Từ bài đăng, nếu chúng ta muốn áp dụng nhiều middleware,

412
00:30:51,750 --> 00:30:56,035
chúng ta chỉ có thể thêm chính bên trong cái này đằng sau cái kia.

413
00:30:56,035 --> 00:30:58,050
Bây giờ khi bài đăng được gọi,

414
00:30:58,050 --> 00:31:02,295
ngay bây giờ bạn chỉ đơn giản là thực hiện chức năng này ở đây.

415
00:31:02,295 --> 00:31:04,150
Bây giờ ngay trước đó,

416
00:31:04,150 --> 00:31:12,400
tôi có thể đi vào và nói, Authenticate.VerifyUser, ở đó.

417
00:31:12,400 --> 00:31:13,805
Vậy, điều này có tác dụng gì?

418
00:31:13,805 --> 00:31:17,210
Điều này nói rằng nếu một bài yêu cầu đi vào,

419
00:31:17,210 --> 00:31:20,940
đầu tiên tôi sẽ thực hiện middleware này,

420
00:31:20,940 --> 00:31:24,805
mà tôi đã xuất khẩu từ các tập tin authentic.js,

421
00:31:24,805 --> 00:31:26,100
đầu tiên tôi áp dụng

422
00:31:26,100 --> 00:31:32,075
điều đó, tương đương với nói hộ chiếu xác thực JWT và bạn đang kiểm tra người dùng.

423
00:31:32,075 --> 00:31:34,655
Sau đó, nếu điều này thành công,

424
00:31:34,655 --> 00:31:38,890
sau đó tôi sẽ tiếp tục làm phần còn lại của nó.

425
00:31:38,890 --> 00:31:42,955
Nếu xác thực không thành công tại thời điểm này,

426
00:31:42,955 --> 00:31:46,290
sau đó hộ chiếu xác thực sẽ trả lời

427
00:31:46,290 --> 00:31:49,395
lại cho khách hàng với thông báo lỗi thích hợp.

428
00:31:49,395 --> 00:31:51,640
Vì vậy, điều đó đã được xử lý bởi chứng thực hộ chiếu,

429
00:31:51,640 --> 00:31:54,350
vì vậy tôi không phải lo lắng bất cứ điều gì ngoài thời điểm đó.

430
00:31:54,350 --> 00:31:58,300
Nếu tôi đã vượt qua middleware này và sau đó nhận được để

431
00:31:58,300 --> 00:32:02,990
thực hiện các chức năng tiếp theo có nghĩa là xác thực của tôi đã thành công,

432
00:32:02,990 --> 00:32:05,560
vì vậy tôi có thể tiến hành về phía trước từ thời điểm này.

433
00:32:05,560 --> 00:32:11,760
Vì vậy, điều này hoạt động như là rào cản cho phương pháp bài này.

434
00:32:11,760 --> 00:32:14,860
Bây giờ sử dụng cùng một đối số,

435
00:32:14,860 --> 00:32:21,435
tôi chỉ có thể áp dụng phần mềm trung gian đặc biệt này cho tất cả các phương pháp khác.

436
00:32:21,435 --> 00:32:23,845
Tôi có thể làm điều đó để đặt chỗ.

437
00:32:23,845 --> 00:32:26,030
Mặc dù trong trường hợp này,

438
00:32:26,030 --> 00:32:28,640
đặt sẽ không được làm bất cứ điều gì.

439
00:32:28,640 --> 00:32:30,110
Nhưng trong mọi trường hợp,

440
00:32:30,110 --> 00:32:33,980
tôi sẽ chỉ đơn giản là vì lợi ích của sự đồng nhất,

441
00:32:33,980 --> 00:32:38,490
tôi sẽ áp dụng xác minh người dùng cũng đặt và tất nhiên,

442
00:32:38,490 --> 00:32:41,315
để xóa quá, tôi sẽ áp dụng đặt.

443
00:32:41,315 --> 00:32:44,805
Tương tự như vậy, đi xuống đến /disHid,

444
00:32:44,805 --> 00:32:48,915
nhận được tôi sẽ cho phép điều đó để làm việc mà không có bất kỳ vấn đề.

445
00:32:48,915 --> 00:32:52,470
Bài viết, tôi sẽ áp dụng người dùng xác minh.

446
00:32:52,470 --> 00:32:59,600
Đặt cũng tôi sẽ áp dụng xác minh người dùng và xóa cũng giống nhau.

447
00:32:59,600 --> 00:33:09,105
Đối với các /dishid/bình luận, tôi sẽ để lại get open,

448
00:33:09,105 --> 00:33:14,030
nó là okay cho bất cứ ai để lấy ý kiến về một món ăn cụ thể.

449
00:33:14,030 --> 00:33:17,140
Đăng bài, tôi sẽ đóng bài này,

450
00:33:17,140 --> 00:33:21,995
vì vậy chỉ có người dùng đã xác minh mới có thể đăng bình luận.

451
00:33:21,995 --> 00:33:27,710
Đặt cũng tôi sẽ đóng cửa này và xóa quá.

452
00:33:29,280 --> 00:33:33,035
Bạn cần phải đi thêm một bước nữa và nói,

453
00:33:33,035 --> 00:33:38,230
“Chỉ những người dùng đã đăng nhận xét mới có thể xóa bài đăng của riêng họ.”

454
00:33:38,230 --> 00:33:40,310
Nhưng chúng tôi sẽ làm điều đó trong mô-đun tiếp theo.

455
00:33:40,310 --> 00:33:41,840
Trong thời điểm này, tôi sẽ nói,

456
00:33:41,840 --> 00:33:44,415
“Được rồi, một người dùng đã xác minh có thể xóa bất kỳ bình luận nào.”

457
00:33:44,415 --> 00:33:46,715
Điều này là tất nhiên không đúng,

458
00:33:46,715 --> 00:33:48,850
chúng tôi có thể đặt một kiểm tra bổ sung,

459
00:33:48,850 --> 00:33:52,145
nhưng chúng tôi sẽ làm điều đó trong mô-đun tiếp theo của khóa học này.

460
00:33:52,145 --> 00:33:54,405
Vì vậy, để xóa cũng tôi áp dụng như nhau.

461
00:33:54,405 --> 00:33:58,060
Một lần nữa, cho các bình luận bộ định tuyến món ăn/ý kiến Id,

462
00:33:58,060 --> 00:34:00,300
có được tôi sẽ để nó như mở.

463
00:34:00,300 --> 00:34:04,485
Bài viết, tôi sẽ để nó đóng lại.

464
00:34:04,485 --> 00:34:12,640
Đặt cũng đóng nó đi và sau đó cho xóa cũng tôi sẽ đóng này đi.

465
00:34:12,640 --> 00:34:14,970
Xóa tất nhiên như tôi đã nói,

466
00:34:14,970 --> 00:34:19,180
thao tác xóa nên được phép chỉ có một người dùng

467
00:34:19,180 --> 00:34:24,150
đã tạo ra bình luận nên được yêu cầu xóa điều đó,

468
00:34:24,150 --> 00:34:27,960
nhưng bạn cần phải thiết lập một vài điều bổ sung để làm việc một cách chính xác,

469
00:34:27,960 --> 00:34:30,825
mà chúng tôi sẽ làm trong mô-đun tiếp theo.

470
00:34:30,825 --> 00:34:36,455
Hiện tại, chúng tôi đang nói rằng một người dùng đã được xác minh có thể xóa một nhận xét cụ thể, đó là nó.

471
00:34:36,455 --> 00:34:42,820
Bây giờ chúng tôi sẽ áp dụng cùng một nguyên tắc cho bộ định tuyến quảng cáo và cũng là bộ định tuyến lãnh đạo.

472
00:34:42,820 --> 00:34:44,950
Vì vậy, đi vào router quảng cáo,

473
00:34:44,950 --> 00:34:53,100
hãy để tôi nhập xác thực

474
00:34:57,320 --> 00:35:00,870
và sau đó nhận được là mở,

475
00:35:00,870 --> 00:35:03,540
vì vậy đây là router lãnh đạo.

476
00:35:03,540 --> 00:35:05,380
Vì vậy, nhận được là mở.

477
00:35:05,380 --> 00:35:08,365
Bài viết, Tôi sẽ kiểm soát điều đó,

478
00:35:08,365 --> 00:35:12,865
đặt, kiểm soát, xóa, kiểm soát,

479
00:35:12,865 --> 00:35:14,790
lãnh đạo router, lãnh đạo ID,

480
00:35:14,790 --> 00:35:17,255
nhận được là okay, bài viết,

481
00:35:17,255 --> 00:35:22,330
kiểm soát, đặt được kiểm soát và xóa được kiểm soát.

482
00:35:22,330 --> 00:35:24,795
Cùng một điều với bộ định tuyến quảng cáo.

483
00:35:24,795 --> 00:35:38,652
Hãy để tôi, yêu cầu xác thực

484
00:35:38,652 --> 00:35:43,570
và sau đó cho các tuyến đường được mở,

485
00:35:43,570 --> 00:35:47,109
POST được kiểm soát, đặt được kiểm soát,

486
00:35:47,109 --> 00:35:50,790
xóa được kiểm soát, điều tương tự cho các promorouter/promoid.

487
00:35:50,790 --> 00:35:54,460
Get là mở, POST được kiểm soát,

488
00:35:54,460 --> 00:35:58,395
đặt và xóa cũng được kiểm soát, đó là nó.

489
00:35:58,395 --> 00:36:00,225
Hãy lưu tất cả các thay đổi.

490
00:36:00,225 --> 00:36:02,660
Vì vậy, một khi chúng tôi hoàn thành tất cả các thay đổi, chúng

491
00:36:02,660 --> 00:36:04,185
ta hãy lưu các thay đổi.

492
00:36:04,185 --> 00:36:08,270
Bây giờ, ứng dụng của chúng tôi đã sẵn sàng để được kiểm tra.

493
00:36:08,270 --> 00:36:11,485
Vì vậy, chúng ta hãy đi và khởi động lại máy chủ của chúng tôi,

494
00:36:11,485 --> 00:36:14,885
hoặc nếu máy chủ không chạy,

495
00:36:14,885 --> 00:36:16,590
chúng tôi sẽ chỉ khởi động máy chủ.

496
00:36:16,590 --> 00:36:18,770
Đi đến thiết bị đầu cuối,

497
00:36:18,770 --> 00:36:20,040
máy chủ của tôi không chạy.

498
00:36:20,040 --> 00:36:23,930
Vì vậy, hãy để tôi bắt đầu máy chủ bằng cách gõ npm start.

499
00:36:24,620 --> 00:36:28,935
Thật thú vị, nó chỉ ném một lỗi ở đây,

500
00:36:28,935 --> 00:36:32,330
Tôi chỉ muốn minh họa cho bạn rằng ngay cả tôi có thể phạm sai lầm,

501
00:36:32,330 --> 00:36:34,840
vì vậy bạn sẽ thấy rằng có một lỗi ở đây nói,

502
00:36:34,840 --> 00:36:40,275
“Không thể tìm thấy module.authenticate”, và sau đó nếu tôi nhìn qua mã,

503
00:36:40,275 --> 00:36:45,255
tôi thấy rằng vấn đề này xảy ra trong,

504
00:36:45,255 --> 00:36:46,850
nó đã xảy ra ở đâu?

505
00:36:46,850 --> 00:36:48,350
Vì vậy, tôi chỉ tìm kiếm ở đây,

506
00:36:48,350 --> 00:36:50,020
và sau đó một nơi nào đó xuống đây,

507
00:36:50,020 --> 00:36:56,130
tôi nhận thấy rằng vấn đề này xảy ra bên trong tập tin users.js của tôi.

508
00:36:56,130 --> 00:36:57,870
Vì vậy, ngay tại đó, nó nói,

509
00:36:57,870 --> 00:37:00,355
đây là trong tập tin users.js.

510
00:37:00,355 --> 00:37:05,655
Vì vậy, đi đến tập tin users.js, chúng ta hãy sửa chữa điều đó.

511
00:37:05,655 --> 00:37:09,015
Đi đến tập tin users.js,

512
00:37:09,015 --> 00:37:14,285
ngay ở trên cùng khi tôi yêu cầu xác thực, tôi nói,

513
00:37:14,285 --> 00:37:17,555
“.authenticate”, và như tôi đã nói với bạn,

514
00:37:17,555 --> 00:37:21,200
đó phải là một dấu chấm vì nó nằm trong thư mục phía trên.

515
00:37:21,200 --> 00:37:25,905
Tệp users.js này trong thư mục Routes,

516
00:37:25,905 --> 00:37:31,985
và xác thực là trong thư mục Projects Route vì vậy điều này nên được chấm chấm xác thực.

517
00:37:31,985 --> 00:37:34,660
Vì vậy, nếu bạn phạm sai lầm,

518
00:37:34,660 --> 00:37:40,450
đó là cách bạn sẽ được nhắc nhở về lỗi mà bạn đã giới thiệu.

519
00:37:40,450 --> 00:37:44,540
Vì vậy, chúng ta hãy lưu các thay đổi và sau đó khởi động lại máy chủ của chúng tôi.

520
00:37:44,540 --> 00:37:47,795
Một lần nữa, quay trở lại thiết bị đầu cuối đó,

521
00:37:47,795 --> 00:37:54,735
hãy để tôi bắt đầu máy chủ của tôi và máy chủ của tôi bây giờ là lên và chạy, chúng

522
00:37:54,735 --> 00:38:00,235
ta hãy đi đến Postman và sau đó kiểm tra ứng dụng của chúng tôi.

523
00:38:00,235 --> 00:38:04,695
Bây giờ, trong Postman, hãy để tôi đầu tiên cố gắng làm

524
00:38:04,695 --> 00:38:11,170
một GET trên localhost:3000/món ăn và sau đó khi tôi làm một GET,

525
00:38:11,170 --> 00:38:15,620
nó là thành công bởi vì điểm cuối GET không được kiểm soát.

526
00:38:15,620 --> 00:38:18,595
Vì vậy, tôi có thể làm một GET trên các món ăn,

527
00:38:18,595 --> 00:38:23,545
Tôi có thể làm một GET trên chương trình khuyến mãi,

528
00:38:23,545 --> 00:38:25,420
và tất cả các hoạt động tốt.

529
00:38:25,420 --> 00:38:28,300
Nhưng nếu tôi cố gắng làm một bài đăng trên các món ăn,

530
00:38:28,300 --> 00:38:32,435
vì vậy hãy để tôi tìm nơi tôi đã thực hiện một bài đăng trên các món ăn.

531
00:38:32,435 --> 00:38:35,245
Ở đây tôi đã thực hiện một bài đăng trên các món ăn.

532
00:38:35,245 --> 00:38:38,030
Vì vậy, khi tôi cố gắng để làm một POST trên các món ăn,

533
00:38:38,030 --> 00:38:40,540
nó ngay lập tức nói trái phép.

534
00:38:40,540 --> 00:38:47,410
Vì vậy, mô-đun hộ chiếu của tôi đã nhận ra rằng tôi không được phép để tôi không được phép làm điều này,

535
00:38:47,410 --> 00:38:49,825
vì vậy đó là những gì nó đang nhắc nhở tôi về.

536
00:38:49,825 --> 00:38:52,750
Hãy để tôi làm sạch các cookie từ,

537
00:38:52,750 --> 00:38:57,980
trong trường hợp bạn tìm thấy một cookie trong Postman của bạn chỉ

538
00:38:57,980 --> 00:39:00,410
cần loại bỏ các cookie tương ứng với localhost bởi vì

539
00:39:00,410 --> 00:39:03,815
cookie đó không còn cần thiết và sẽ không được yêu cầu.

540
00:39:03,815 --> 00:39:06,100
Vì vậy, ngay cả khi tôi loại bỏ các cookie và sau đó POST,

541
00:39:06,100 --> 00:39:07,990
nó vẫn sẽ nói trái phép.

542
00:39:07,990 --> 00:39:11,715
Vì vậy, tôi không được phép thực hiện các hoạt động này.

543
00:39:11,715 --> 00:39:13,305
Vì vậy, tôi phải đăng nhập.

544
00:39:13,305 --> 00:39:15,430
Bây giờ, nếu bạn đã thực hiện bài tập trước đó,

545
00:39:15,430 --> 00:39:19,390
bạn đã rời khỏi người dùng mà bạn đã đăng ký trước đó.

546
00:39:19,390 --> 00:39:25,865
Vì vậy, ví dụ, bạn đã đăng ký người dùng cụ thể này trong bài tập trước đó,

547
00:39:25,865 --> 00:39:29,530
hãy để tôi cố gắng đăng ký cùng một người dùng một lần nữa và

548
00:39:29,530 --> 00:39:36,090
máy chủ của tôi nên phàn nàn rằng useRexistSerror để có nghĩa là người dùng tồn tại,

549
00:39:36,090 --> 00:39:38,455
vì vậy tôi không cần phải đăng ký lại.

550
00:39:38,455 --> 00:39:42,290
Nếu bạn đã xóa người dùng khỏi MongoDB của bạn,

551
00:39:42,290 --> 00:39:47,275
chỉ cần đăng ký người dùng đó một lần nữa và sau đó chúng ta hãy đăng nhập.

552
00:39:47,275 --> 00:39:55,830
Vì vậy, chúng tôi sẽ gửi một yêu cầu đăng nhập đến điểm kết thúc đó.

553
00:39:55,830 --> 00:40:00,640
Vì vậy, khi tôi gửi yêu cầu đăng nhập bằng cách thực hiện một POST cho người dùng cuối, hãy

554
00:40:00,640 --> 00:40:03,365
chú ý những gì được trả lại bởi máy chủ của tôi.

555
00:40:03,365 --> 00:40:06,965
Bạn ngay lập tức nhận thấy rằng trong thư trả lời

556
00:40:06,965 --> 00:40:10,830
cùng với cờ thành công và thông báo trạng thái,

557
00:40:10,830 --> 00:40:13,740
bạn cũng nhận được một mã thông báo ở đây.

558
00:40:13,740 --> 00:40:16,365
Bây giờ, mã thông báo đặc biệt này,

559
00:40:16,365 --> 00:40:17,960
tôi cần phải sao chép mã thông báo này,

560
00:40:17,960 --> 00:40:21,045
bởi vì trong các yêu cầu tiếp theo của tôi,

561
00:40:21,045 --> 00:40:23,535
tôi sẽ cần phải bao gồm mã thông báo này.

562
00:40:23,535 --> 00:40:31,610
Vì vậy, để tôi đi đến phiên bản thô của điều này và rằng tôi sẽ sao chép mã thông báo này.

563
00:40:31,610 --> 00:40:33,875
Mã thông báo này không chỉ là một chuỗi dài ở đó,

564
00:40:33,875 --> 00:40:36,260
vì vậy hãy để tôi sao chép mã thông báo này.

565
00:40:36,260 --> 00:40:41,765
Sau đó, bây giờ nếu bạn tò mò về những gì được chứa trong mã thông báo này,

566
00:40:41,765 --> 00:40:44,800
JSON Web Token có thể được kiểm tra.

567
00:40:44,800 --> 00:40:48,140
Có một trang web cụ thể mà bạn có thể vào và gõ

568
00:40:48,140 --> 00:40:52,235
vào JSON Web Token của bạn và sau đó thực sự kiểm tra những gì bên trong JSON Web Token.

569
00:40:52,235 --> 00:40:54,980
Hãy làm điều đó như là bước tiếp theo.

570
00:40:54,980 --> 00:40:56,685
Trong một cửa sổ trình duyệt,

571
00:40:56,685 --> 00:41:05,565
chỉ cần gõ jwt.io và điều này sẽ đưa bạn đến trang web này được gọi là JSON Web Token jwt.io.

572
00:41:05,565 --> 00:41:07,590
Nếu bạn nhớ lại, trong bài giảng,

573
00:41:07,590 --> 00:41:10,685
tôi đã cho bạn thấy cấu trúc của JSON Web Token

574
00:41:10,685 --> 00:41:14,290
và đã cho bạn thấy rằng JSON Web Token chứa ba phần: tiêu đề

575
00:41:14,290 --> 00:41:18,040
, tải trọng và thông tin ở đó.

576
00:41:18,040 --> 00:41:19,730
Bây giờ, trong trường hợp này,

577
00:41:19,730 --> 00:41:25,880
thông tin là lên ở đây vì vậy

578
00:41:25,880 --> 00:41:33,285
tôi sẽ dán JSON Web Token của tôi vào phía bên trái này,

579
00:41:33,285 --> 00:41:37,270
vì vậy hãy để tôi chọn đó và sau đó dán JSON Web Token của tôi vào

580
00:41:37,270 --> 00:41:41,920
phía bên trái trong phần mã hóa và sau đó ở phía bên phải,

581
00:41:41,920 --> 00:41:46,030
nó hiển thị cho bạn chính xác những gì là bên trong JSON Web Token mà tôi vừa tạo ra.

582
00:41:46,030 --> 00:41:49,580
Vì vậy, nó nói tiêu đề chứa hai mẩu thông tin này.

583
00:41:49,580 --> 00:41:54,090
Tải trọng thông báo rằng nó chứa ID của

584
00:41:54,090 --> 00:41:59,245
người dùng và sau đó là chữ ký ở dưới cùng ở đây.

585
00:41:59,245 --> 00:42:03,995
Vì vậy, đây là những gì được chứa bên trong JSON Web Token của tôi.

586
00:42:03,995 --> 00:42:07,005
Quay lại Postman,

587
00:42:07,005 --> 00:42:12,110
bây giờ để tôi thử lấy các món ăn.

588
00:42:12,110 --> 00:42:15,940
Vì vậy, khi tôi nói GET localhost:3000/món ăn,

589
00:42:15,940 --> 00:42:18,650
nó vẫn sẽ trả về một chuỗi rỗng,

590
00:42:18,650 --> 00:42:23,385
mảng rỗng ở đây vì cơ sở dữ liệu của tôi không chứa nó.

591
00:42:23,385 --> 00:42:29,635
Vì vậy, hãy để tôi đăng một món ăn vào cơ sở dữ liệu của tôi.

592
00:42:29,635 --> 00:42:33,290
Vì vậy, tôi sẽ chọn hoạt động POST và trong cơ thể,

593
00:42:33,290 --> 00:42:36,095
bạn thấy rằng tôi có món ăn của tôi ở đây.

594
00:42:36,095 --> 00:42:41,215
Trong tiêu đề, tôi sẽ thêm vào tiêu đề mới gọi là

595
00:42:41,215 --> 00:42:47,240
ủy quyền và bạn nhớ lại rằng trước đó cho phép cơ bản,

596
00:42:47,240 --> 00:42:53,425
bạn nói cơ bản và sau đó bạn đã có cơ sở 64 mã hóa chuỗi đó.

597
00:42:53,425 --> 00:42:58,970
Nếu bạn muốn bao gồm JSON Web Token của bạn trong tiêu đề ủy quyền,

598
00:42:58,970 --> 00:43:01,150
bởi vì trong mã của chúng

599
00:43:01,150 --> 00:43:04,550
tôi, chúng tôi đã nói ủy quyền như token mang.

600
00:43:04,550 --> 00:43:08,040
Vì vậy, nếu bạn muốn bao gồm mã thông báo trong tiêu đề ủy quyền,

601
00:43:08,040 --> 00:43:13,275
trong ủy quyền chúng tôi sẽ nói người mang và sau đó chúng tôi sẽ dán

602
00:43:13,275 --> 00:43:19,080
chuỗi mã thông báo mà chúng tôi vừa sao chép từ yêu cầu đến của chúng tôi.

603
00:43:19,080 --> 00:43:21,935
Vì vậy, chúng tôi sẽ dán chuỗi mã thông báo trong đó.

604
00:43:21,935 --> 00:43:24,360
Vì vậy, đây là những gì sẽ được chứa

605
00:43:24,360 --> 00:43:29,795
trong tiêu đề ủy quyền của yêu cầu đi của tôi ở đây,

606
00:43:29,795 --> 00:43:33,845
yêu cầu POST đi đây.

607
00:43:33,845 --> 00:43:39,970
Vì vậy, thông báo, phía bên trái nói người mang và phía bên phải là chuỗi,

608
00:43:39,970 --> 00:43:43,230
mã thông báo mà tôi vừa sao chép từ

609
00:43:43,230 --> 00:43:48,460
điểm mà tôi đăng nhập và sau đó cho phép tôi gửi tin nhắn POST ngay bây giờ

610
00:43:48,460 --> 00:43:57,590
và POST của tôi bây giờ là thành công và điều này được đăng lên cơ sở dữ liệu của tôi.

611
00:43:57,590 --> 00:44:01,115
Bây giờ, nếu bạn muốn chắc chắn rằng nó đã được đăng,

612
00:44:01,115 --> 00:44:04,555
chúng ta hãy làm một GET và khi bạn làm một GET,

613
00:44:04,555 --> 00:44:12,935
bạn có thể thấy rằng thực sự món ăn đó đã được chèn vào cơ sở dữ liệu của tôi như được hiển thị ở đây.

614
00:44:12,935 --> 00:44:19,260
Vì vậy, đây là cách bạn sẽ sử dụng JSON Web Token trong ứng dụng của bạn.

615
00:44:19,260 --> 00:44:22,230
Vì vậy, bất cứ khi nào bạn cần thực hiện một POST, PUT,

616
00:44:22,230 --> 00:44:25,505
hoặc một thao tác DELETE trên bất kỳ điểm cuối nào,

617
00:44:25,505 --> 00:44:27,010
bạn sẽ được kèm theo.

618
00:44:27,010 --> 00:44:33,895
Vì vậy, hãy để tôi quay lại yêu cầu POST này ở đây.

619
00:44:33,895 --> 00:44:35,890
Trong tiêu đề, bạn sẽ đặt

620
00:44:35,890 --> 00:44:41,540
trường ủy quyền này và sau đó điều này sẽ được bao gồm trong ủy quyền,

621
00:44:41,540 --> 00:44:47,540
bạn sẽ bắt đầu nó với người mang và sau đó là chuỗi mã thông báo,

622
00:44:47,540 --> 00:44:50,200
sau đó không gian mang,

623
00:44:50,200 --> 00:44:54,215
một không gian duy nhất và sau đó là chuỗi mã thông báo sau đó.

624
00:44:54,215 --> 00:44:58,310
Vì vậy, đó là cách tin nhắn yêu cầu của bạn sẽ

625
00:44:58,310 --> 00:45:03,140
mang theo JSON Web Token trong tiêu đề của thông báo yêu cầu đi.

626
00:45:03,140 --> 00:45:08,220
Bạn cũng có thể bao gồm mã thông báo trong nội dung của thư yêu cầu đi.

627
00:45:08,220 --> 00:45:10,310
Bây giờ, cho điều đó, bạn sẽ phải cấu hình

628
00:45:10,310 --> 00:45:18,210
máy chủ express của bạn đặc biệt là JWT bổ sung trong

629
00:45:18,210 --> 00:45:21,120
tập tin authenticate.js để chấp nhận nó từ

630
00:45:21,120 --> 00:45:24,455
cơ thể, vì vậy bạn nhớ lại rằng ở đó chúng tôi đã thấy rằng

631
00:45:24,455 --> 00:45:28,890
JWT bổ sung hỗ trợ nhiều cách khác nhau để trích xuất

632
00:45:28,890 --> 00:45:33,695
JSON Web Token từ yêu cầu.

633
00:45:33,695 --> 00:45:35,090
Vì vậy, ở đó bạn cần phải chỉ định,

634
00:45:35,090 --> 00:45:36,670
nếu bạn sẽ được bao gồm nó trong cơ thể,

635
00:45:36,670 --> 00:45:39,115
bạn cần phải xác định thông tin đó ở đó.

636
00:45:39,115 --> 00:45:42,395
Bây giờ, các chi tiết về làm thế nào để làm điều đó bạn có thể tham khảo

637
00:45:42,395 --> 00:45:49,885
tài liệu mô-đun Passport JWT để hiểu làm thế nào điều này được thực hiện.

638
00:45:49,885 --> 00:45:54,610
Trong khóa học này, tôi sẽ chỉ đơn giản là sử dụng trong tiêu đề ủy quyền

639
00:45:54,610 --> 00:45:59,835
như tôi đã trình bày ở đây và điều này hoạt động tốt cho hầu hết các trường hợp.

640
00:45:59,835 --> 00:46:02,620
Bây giờ, nếu bạn đang phát triển một ứng dụng Web,

641
00:46:02,620 --> 00:46:06,635
một ứng dụng Angular, hoặc một ứng dụng Ionic hoặc NativeScript,

642
00:46:06,635 --> 00:46:09,800
bạn cần có khả năng cấu hình

643
00:46:09,800 --> 00:46:16,615
ứng dụng đó theo đó JSON Web Token sẽ được bao gồm trong tiêu đề ủy quyền.

644
00:46:16,615 --> 00:46:22,215
Trong bài học cuối cùng của khóa học này,

645
00:46:22,215 --> 00:46:26,255
tôi sẽ chỉ cho bạn cách tích hợp khách hàng và máy chủ,

646
00:46:26,255 --> 00:46:29,310
khách hàng mà bạn đã phát triển trong các khóa học trước đó với

647
00:46:29,310 --> 00:46:32,495
máy chủ mà chúng tôi đã phát triển trong khóa học này.

648
00:46:32,495 --> 00:46:35,120
Với điều này, chúng tôi hoàn thành bài tập này.

649
00:46:35,120 --> 00:46:37,940
Trong bài tập này, chúng ta đã thấy làm thế nào chúng ta

650
00:46:37,940 --> 00:46:42,200
có thể cấu hình ứng dụng của chúng tôi để sử dụng JSON Web Token,

651
00:46:42,200 --> 00:46:50,555
và chúng tôi đã thấy cách chúng tôi xử lý xác thực của người dùng bằng cách sử dụng JSON Web Token,

652
00:46:50,555 --> 00:46:55,555
sử dụng sự hỗ trợ từ các mô-đun Passport và các mô-đun Passport JWT,

653
00:46:55,555 --> 00:46:58,605
và các mô-đun JSON Web Token Node.

654
00:46:58,605 --> 00:47:01,090
Với điều này, chúng tôi hoàn thành bài tập này.

655
00:47:01,090 --> 00:47:09,110
Đây là thời điểm tốt để bạn thực hiện một Git Commit với thông điệp Passport JWT.