[MUSIC]
Chúng tôi đã phát triển một máy chủ REST API đầy đủ sử dụng Express và
MongoDB như một phần của khóa học này.
Để máy chủ có thể giao tiếp một cách có ý nghĩa với khách hàng của chúng
tôi, chúng tôi sẽ thực hiện một vài điều chỉnh nhỏ để nó trả về đúng loại dữ liệu.
Để thực hiện khách hàng của chúng tôi có thể hoạt động hiệu quả hơn
với dữ liệu được trả về từ phía máy chủ của chúng tôi.
Vì vậy, để làm điều đó, chúng
ta hãy làm việc trên một vài điều chỉnh phía máy chủ của chúng tôi trong bài tập này.
Đi đến máy chủ của chúng tôi trong trình soạn thảo, trước khi chúng tôi bắt đầu làm việc trên máy chủ,
tôi sẽ đề nghị bạn tải xuống tất cả các hình ảnh mà tôi đã cung cấp
dưới dạng tệp zip trong tài nguyên tập thể dục được gọi là images.zip.
Giải nén tập tin và sau đó có được tất cả các hình ảnh từ đó, và
sau đó sao chép những hình ảnh đó vào thư mục hình ảnh công cộng trong máy chủ của chúng tôi.
Vì vậy, bạn thấy rằng ở đây tôi đã sao chép tất cả các hình ảnh vào
thư mục hình ảnh công cộng của tôi ở đây đã.
Bởi vì máy chủ của chúng tôi là một trong đó sẽ phục vụ tất cả những hình ảnh cho
ứng dụng khách hàng của chúng tôi.
Tiếp theo, chúng tôi đi đến cors và điều chỉnh danh sách trắng đó, ở đây.
Vì vậy, đối với ứng dụng khách Angular của chúng tôi, nếu chúng ta bắt đầu nó
với lệnh ng serve, nó chạy tại localhost:4200.
Vì vậy, bất kỳ yêu cầu đến từ
ứng dụng Angular của chúng tôi đến máy chủ sẽ mang nó như là nguồn gốc của họ ở đó.
Vì vậy, đó là lý do tại sao tôi sẽ thêm vào danh sách trắng của tôi, để
bất kỳ vấn đề cors sẽ được giải quyết tự động.
Vì vậy, đi vào tập tin cors.js đó,
trong danh sách trắng của tôi, ở đây, hãy để tôi thêm
vào http://localhost:, 4200.
Và đây là nguồn gốc mà từ đó tất cả máy khách Angular của tôi sẽ được
bắt nguồn yêu cầu đến máy chủ này.
Vì vậy, theo cách đó, cors của tôi sẽ không gây ra vấn đề cho có thể Angular khách hàng.
Tiếp theo, chúng ta cần cập nhật một vài tuyến đường để xử lý
các tham số truy vấn, và cũng có một vài điều chỉnh nhỏ khác.
Hãy để tôi bắt đầu với các tập tin promoRouter.js.
Vì vậy, đó là đơn giản để có được cập nhật.
Vì vậy, đi đến các tập tin promoRouter.js, trong các tập tin Promorouter, cho
yêu cầu nhận được mà chúng tôi nhận được ở đây,
thay vì làm promotions.Find với một JavaScript trống rỗng,
ở đây tôi sẽ cung cấp req.query như là
tham số để khuyến mãi đó.Find ở đây.
Điều tương tự với LeaderRouter cũng, vì vậy hãy để tôi đi đến tập tin leaderRouter.js.
Và trong LeaderRouter cũng,
ở đây nơi bạn tìm thấy Leaders.Find với đối tượng JavaScript rỗng.
Thay vào đó, thay thế bằng req.query
đó, để các tham số truy vấn sẽ được thông qua.
Vì vậy, đây là nơi chúng tôi sẽ vượt qua trong cột đặc trưng
thông qua như tham số truy vấn.
Bây giờ đã điều chỉnh hai, bây giờ chúng ta hãy làm việc trên tuyến đường món ăn,
do đó, đi đến tập tin dishRouter.js, ngay cả trong DishRouter, cập nhật tương tự ở đây.
Vì vậy, đi đến món ăn này.Find trong phương pháp get ở đây, thay đổi đó để req.query.
Vì vậy, với điều này, bản cập nhật DishRouter của tôi đã được hoàn thành.
Vì vậy, bây giờ chúng tôi đã cập nhật Promorouter, ReaderRouter, và D
ishRouter, sau đó chúng tôi sẽ tiếp tục cập nhật rằng FavoriterOuter.
Bây giờ bạn đã thực hiện bộ định tuyến yêu thích như là một phần của
nhiệm vụ thứ tư của bạn.
Bây giờ trong FavoriterOuter, bạn sẽ thấy rằng đối với
FavoriterOuter tôi không cho bạn thấy phần còn lại bởi vì
bạn nên đã thực hiện như một phần của nhiệm vụ của bạn.
Trước tiên hãy để tôi thu hút sự chú ý của bạn đến phương pháp get cho
FavoriterOuter.route (“/:Dishid').
Bây giờ, tôi sẽ sử dụng phương pháp get này để chỉ
kiểm tra để đảm bảo rằng các món ăn cụ thể với
một DisHid đã là một yêu thích cho người sử dụng.
Vì vậy, thay vì chỉ đơn giản là nói GET hoạt động không được hỗ trợ,
tôi chỉ sẽ tận dụng sự hiện diện của hoạt động get này.
Và sau đó chúng ta sẽ nói,
yêu thích.Findone.
Và tôi sẽ nói,
người dùng: req.user.id
Vì vậy, chúng tôi sẽ tìm thấy các mục yêu thích cho người dùng cụ thể đó.
Và sau đó chúng ta sẽ nói, .sau đó, yêu thích.
Và, bắt ((err),
tiếp theo (err)).
Và sau đó tương tự ở đây, chúng tôi sẽ thêm vào lỗi ở đây.
Tiếp theo (err)), ở đây.
Vì vậy, bên trong này.sau đó, khi chúng tôi nhận được yêu thích,
sau đó chúng tôi sẽ kiểm tra, nếu (! mục yêu thích).
Vì vậy, nếu không có mục yêu thích cho người dùng này,
thì rõ ràng là món ăn mà chúng tôi đang kiểm tra không tồn tại.
Vì vậy, chúng tôi sẽ trở lại, res.StatusCode, 200.
SeTheader ('Content-Type
'' ứng dụng/json ').
Và sau đó chúng ta sẽ trở lại,
Nói, “tồn tại”: sai.
Vì vậy, những gì chúng tôi đang xác định ở đây là nếu get được thực hiện
để điểm cuối này với một DisHid, điều này tồn tại cờ ở đây
sẽ được thiết lập thành true nếu món ăn này là một phần của mục yêu thích của tôi.
Nếu món ăn này không phải là một phần của mục yêu thích của tôi, tôi sẽ thiết lập cờ tồn tại để sai.
Vì vậy, ở đây, bạn thấy rằng kể từ khi tôi không có bất kỳ mục yêu thích, vì vậy
tồn tại nên được tự động sai tại thời điểm này.
Vì vậy, chúng tôi sẽ nói “tồn tại”: sai, và sau đó chúng tôi sẽ trả lại các mục yêu thích, ở đây.
Vâng, rõ ràng trong trường hợp này,
các mục yêu thích sẽ là null tại thời điểm này, nếu không.
Vì vậy, có nghĩa là yêu thích không phải là null, vì vậy chúng tôi sẽ nói nếu,
(favorites.dishes .indexof),
vì vậy chúng tôi sẽ tìm kiếm req.params.
Dishid, nên chúng ta sẽ tìm kiếm cái này.
Favorites.dishes.array, để xem nếu món ăn tồn tại trong đó.
Và nếu nó không tồn tại, rõ ràng điều này sẽ trả lại một chỉ số tiêu cực ở đây.
Vì vậy, trong trường hợp đó cũng, tôi sẽ trở lại chính xác giống như ở đây.
Vì vậy, nếu nó trả về một chỉ số âm,
thì điều đó có nghĩa là mặc dù người dùng cụ thể này có một trung tâm yêu thích.
Món ăn đặc biệt này không tồn tại trong danh sách
yêu thích của mình, vì vậy đó là lý do tại sao nó sẽ trở lại tồn tại sai ở đây.
Bây giờ nếu không điều đó có nghĩa là món ăn tồn tại trong danh sách yêu thích.
Vì vậy, trong trường hợp này, tôi sẽ trả lại mã trạng thái 200 tồn tại là đúng.
Vì vậy, theo cách đó khi người dùng thực hiện một hoạt động get vào
điểm kết thúc này với /Favorite/Dishid.
Nơi DisHid được cung cấp như là tham số ở đây.
Là tham số hồ sơ ở đây,
sau đó chúng tôi sẽ kiểm tra xem liệu món ăn đó có tồn tại trong mục yêu thích hay không.
Nếu không có mục yêu thích tồn tại cho người dùng này thì chúng tôi sẽ trả về một sai tồn tại.
Tương tự, nếu các mục yêu thích tồn tại,
nhưng món ăn đặc biệt đó không tồn tại trong mục yêu thích thì nó sẽ trả về một sai.
Nếu không nó sẽ trả lại một sự thật.
Vì vậy, lá cờ tồn tại này có thể được sử dụng bởi khách hàng của tôi
để kiểm tra xem món ăn này là một phần của danh sách các món ăn yêu thích cho người dùng này hay không.
Cuối cùng chúng tôi sẽ cập nhật tệp users.js.
Bây giờ trong tập tin users.js, chúng ta cần phải thêm vào một
lĩnh vực router.options khác ở đây bởi vì
đôi khi một yêu cầu bài đăng như bạn đã thấy với đăng nhập,
chúng tôi sẽ gửi các tùy chọn đầu tiên để kiểm tra, đặc biệt là với xe ô tô, cho
dù yêu cầu bài đăng sẽ được cho phép.
Vì vậy, đó là lý do tại sao họ sẽ kiểm tra xe hơi, xe hơi với các lựa chọn ở đây và sau đó.
Chúng tôi chỉ đơn giản
là trả về một thông điệp trạng thái 200 để đáp lại điều đó.
Vì vậy, đối với bất kỳ điểm cuối dưới người dùng nếu chúng tôi nhận được
các tùy chọn sẽ chỉ đơn giản trả về một trạng thái 200 ở đây.
Bây giờ chức năng Đăng nhập mà chúng tôi đã thực hiện trước đó.
Chúng tôi chỉ đơn giản là thực hiện passport.authenticate ('địa phương') ở đây và
sau đó chúng tôi kiểm tra các giá trị còn lại ở đây.
Bây giờ passport.authenticate này ('địa phương'), nếu người dùng không nhận được
chứng thực, nó chỉ đơn giản là trả về một trái phép trong thư trả lời.
Bây giờ điều đó có thể không phải là rất có ý nghĩa cho
phía khách hàng để hiển thị thông tin này.
Vì vậy, đó là lý do tại sao chúng tôi sẽ tăng cường phương thức đăng nhập bài router này
để xác thực sẽ trả lại thông tin có ý nghĩa hơn ở phần này.
Vì vậy, để làm điều đó, chúng ta sẽ không làm hộ
chiếu chứng thực bên trong đây.
Thay vào đó, chúng tôi sẽ mất, vì vậy hãy để tôi loại bỏ điều đó từ đó,
và sau đó bạn sẽ thấy làm thế nào tôi sẽ cập nhật bài đăng bộ định tuyến ở đây.
Vì vậy, chúng ta sẽ thấy CarsWithOptions.
Và sau đó chúng tôi sẽ bao gồm req, res và tiếp theo ở đây.
Và bên trong req, res, và
tiếp theo ở đây, passport.authenticate,
Chúng tôi sẽ gọi điều này với 'địa phương'.
Bây giờ khi chúng ta gọi điều này với địa phương, nếu một
lỗi xác thực xảy ra passport.authenticate có thể được thực hiện để trả về giá trị lỗi,
và nó cũng sẽ trả lại người dùng nếu không có lỗi.
Và nó có thể tham số được gọi là thông tin,
mà sẽ mang thông tin bổ sung có thể được chuyển trở lại cho người dùng.
Lỗi này sẽ được trả lại khi có lỗi chính hãng xảy ra
trong khả năng xác thực.
Nhưng nếu thông tin người dùng được gửi đến passport.authenticate nhưng
người dùng không tồn tại, thì thông tin đó không được tính là lỗi.
Thay vào đó, nó sẽ được tính là người dùng không tồn tại.
Và thông tin đó được truyền lại trong đối tượng thông tin đi vào.
Vì vậy, lỗi sẽ được trả lại khi có một lỗi chính hãng xảy ra trong quá
trình xác thực.
Nhưng thông tin, chúng sẽ chứa thông tin nếu người dùng không tồn tại và vì vậy
passport.authenticate đang truyền lại một thông báo nói rằng người dùng không
tồn tại hoặc tên người dùng không chính xác hoặc mật khẩu không chính xác.
Và như vậy, để thông tin sẽ được thông qua, trong thông báo thông tin.
Bây giờ, chúng ta sẽ thấy điều này hữu ích như thế nào khi chúng ta nhìn vào phía khách hàng một
chút sau đó.
Vì vậy, trong tình huống này,
chúng tôi sẽ xử lý điều này như sau.
Và không chỉ vậy, khi chúng ta gọi hộ chiếu này xác thực,
chúng ta cũng cần phải vượt qua trong một (req, res,
tiếp theo) như ba dải tham số đó.
Vì vậy, đây là cấu trúc.
Khi bạn cần phải gọi hộ chiếu xác thực,
mong đợi nó để vượt qua bạn trở lại thông tin như thế này như một phương pháp gọi lại ở đây.
Vì vậy, bạn cũng cần phải cung cấp req này, res tiếp theo ngay ở đó quá.
Bây giờ, nếu điều này xảy ra.
Vì vậy, chúng tôi sẽ nói nếu (err).
Vì vậy, nếu có một lỗi xảy ra,
chúng tôi sẽ nói trở lại tiếp theo (err) và sau đó để cho trình
xử lý lỗi của bộ định tuyến nhanh của chúng tôi chăm sóc điều đó.
Bây giờ, chúng ta sẽ xem xét các tình huống khác.
Nếu (! người dùng), vì vậy nếu chúng ta đã đạt đến thời điểm này thì điều đó có nghĩa
là nó không phải là một lỗi xảy ra nhưng thay vào đó có lẽ người dùng không thể được tìm thấy.
Nếu người dùng không được tìm thấy thì người dùng ở đây sẽ được đặt thành null trong trường hợp này.
Vì vậy, trong tình huống đó nếu người dùng không tồn tại,
thì chúng ta cần có khả năng truyền thông tin về phía máy chủ.
Vì vậy, những gì chúng tôi sẽ làm là chúng tôi sẽ vượt qua thông tin này trong định dạng này,
vì vậy tôi sẽ cắt ra từ đây, và
sau đó dán nó vào đây và sau đó chúng tôi sẽ chỉnh sửa như vậy.
Nếu người dùng là null, sau đó chúng tôi sẽ gửi lại một StatusCode
của 401 có nghĩa là trái phép, và
sau đó chúng tôi sẽ gửi lại thông tin thành công, sai.
Và sau đó chúng tôi sẽ không đi lại mã thông báo, chúng tôi sẽ chuyển lại thông báo trạng thái.
Vì vậy, ở đây chúng ta sẽ nói đăng nhập, Không thành công.
Và sau đó thông tin thứ ba sẽ vượt qua thông tin này,
đối tượng mà chúng tôi nhận được ở đây như là phần thứ ba trong
thông điệp trả lời mà chúng tôi gửi lại từ máy chủ của chúng tôi ở đây.
Vì vậy cờ thành công sẽ đặt lại thành false.
Trạng thái sẽ được đặt Đăng nhập không thành công và thông tin lỗi,
được thông qua trong thông tin sẽ được thông qua trở lại.
Bây giờ lưu ý rằng tình huống này sẽ xảy ra nếu tên người dùng và
mật khẩu là không chính xác.
Và vì vậy đây không phải là một lỗi, theo nghĩa lỗi, nhưng thực tế là xác thực
không thể tìm thấy người dùng hoặc mật khẩu của người dùng là không chính xác.
Vì vậy, thông tin đó sẽ được mã hóa vào dòng chảy mà đi vào, và để
tôi sẽ vượt qua trở lại như là một lỗi cho phía khách hàng của tôi.
Nếu không một phần được
xử lý như Req.login.
Vì vậy, nếu điều này là thành
công, passport.authenticate sẽ thêm phương pháp này gọi là req.login cho người dùng.
Vì vậy, tại thời điểm này chúng tôi sẽ chỉ vượt qua trong đối tượng người dùng mà chúng tôi đã thu được.
Vì vậy, ở đây, nếu chúng ta đã đạt đến thời điểm này,
sau đó điều đó có nghĩa là đối tượng người dùng không phải là null và
cũng không có lỗi xảy ra, vì vậy điều đó có nghĩa là
người dùng có thể được đăng nhập và vì vậy chúng tôi sẽ nói err.
Vì vậy, nó sẽ cố gắng đăng nhập vào người dùng.
Vì vậy, chúng tôi sẽ nói nếu sai lầm.
Và sau đó chúng tôi sẽ truyền lại cùng một loại thông tin lỗi mà chúng tôi đã làm ở đây.
Vì vậy, trong trường hợp này, nếu lỗi.
Nếu lỗi, sau đó chúng tôi sẽ chuyển lại mã trạng thái 401 và
chúng tôi sẽ nói thành công là sai và trạng thái là Đăng nhập không thành công.
Và sau đó thông tin lỗi
chúng tôi sẽ vượt qua điều này như thay vì
thông tin chúng tôi sẽ vượt qua trong không thể đăng nhập vào người dùng.
Vì vậy, đó là thông báo sẽ vượt qua ở đây, nếu lỗi xảy ra.
Nếu không, chúng ta sẽ xuống dưới đây.
Và vì vậy tại thời điểm này chúng tôi sẽ có thể tạo ra mã thông báo.
Vì vậy, nếu chúng ta đã đạt đến thời điểm này có nghĩa là người dùng đã
đăng nhập thành công và vì vậy bây giờ chúng ta có thể tạo ra mã thông báo.
Vì vậy, chúng tôi sẽ tạo ra các mã thông báo dựa trên ID người dùng và
sau đó chúng tôi sẽ vượt qua lại mã thông báo đó trở lại cho người dùng.
Vì vậy, ở đây chúng ta sẽ nói var token.
Và sau đó chúng ta có thể nói res.StatusCode = 200, và sau đó res.json (thành công) là đúng,
có nghĩa là người dùng đã đăng nhập thành công.
Và vì vậy trạng thái sẽ là Đăng nhập thành công, và
sau đó là phần thứ ba thay vì lỗi tôi sẽ vượt qua mã thông báo trở lại cho người dùng.
Vì vậy, chúng tôi sẽ nói token, token,
token này mà chúng tôi vừa thu được trước đó, để token sẽ được thông qua
như là tài sản token của thông điệp rip light.
Vì vậy, ở đây, chú ý rằng trục này được đặt thành true.
Vì vậy, có nghĩa là người dùng đã đăng nhập thành công.
Và do đó người dùng có thể tiến hành về phía trước tại thời điểm này.
Và điều này phải được thực hiện bên trong Req.login ở đây.
Vì vậy, tại thời điểm này chúng tôi sẽ đóng Req.login.
Vì vậy, nhận thấy rằng đây là bên trong Req.login này ở đây.
Vì vậy, trong đó chúng ta sẽ vượt qua ba trở lại.
Vì vậy, hãy để tôi chỉ thụt lề ngưỡng ba dòng trong.
Và đó là cách chúng tôi sẽ xử lý người dùng đăng nhập.
Vì vậy, một lần nữa, xem xét lại mã này một lần nữa.
Vì vậy, chúng tôi sẽ làm bài router, nhưng
thay vì làm hộ chiếu xác thực ngay tại đó, chúng tôi sẽ nói req, res,
tiếp theo và sau đó bên trong đây chúng tôi sẽ làm một passport.authenticate cho địa phương.
Và xác thực này sẽ vượt qua trở lại, vì vậy chúng tôi có thể cung cấp một hàm gọi lại cho điều đó.
Và chức năng gọi lại này sẽ trả về lỗi, người dùng hoặc
thông tin ở đây.
Và như vậy, nếu nó làm một lỗi, chúng tôi sẽ chỉ cho phép trình xử lý lỗi thể hiện để
chăm sóc điều đó.
Nếu người dùng là null thì điều đó có nghĩa là người dùng đăng nhập đã không thành công,
và lý do cho điều đó sẽ là trong thông tin để sẽ vượt qua trở lại như là
lỗi thông tin trong thư thoại kế hoạch ở đây.
Nếu chúng ta đi đến thời điểm này thì người dùng được xác minh thành công.
Vì vậy, sau đó chúng tôi sẽ đăng nhập vào người dùng.
Vì vậy, passport.authenticate sẽ thêm vào phương pháp này được gọi là Login vào
thông điệp yêu cầu, vì vậy chúng tôi có thể gọi tên đăng nhập với người dùng và
nếu điều này trả về một lỗi, sau đó chúng tôi sẽ trả lại lỗi ở đây một cách thích hợp.
Nếu không thì chúng tôi đã đạt đến điểm mà người dùng được
xác thực thành công để họ có thể tạo ra mã thông báo web JSON ở đây và trả lại mã
thông báo web JSON cho người dùng để xác nhận rằng người dùng đã đăng nhập thành công.
Vì vậy, đó là tập hợp các bước mà chúng tôi sẽ sử dụng ở đây.
Bây giờ lý do tại sao tôi làm một cách phức tạp hơn để xử lý nó là tôi muốn
phân biệt giữa tình huống mà một lỗi chính hãng xảy ra trong quá
trình ứng dụng, như trái ngược với tình huống mà tên người dùng không hợp lệ,
hoặc mật khẩu không hợp lệ.
Vì vậy, hai trường hợp đó sẽ được xử lý bởi tình huống này mà thông tin sẽ
mang thông tin về cho chúng tôi.
Vì vậy, đó không phải là một lỗi perse nhưng đó là một tình huống mà
người dùng không phải là một người dùng hợp lệ hoặc mật khẩu của người dùng không hợp lệ.
Vì vậy, đó là cách họ sẽ xử lý quá trình đăng nhập của người dùng.
Ngoài ra, tôi sẽ thêm vào một phương pháp nữa ở đây được gọi là,
CheckJWToken.
Có thể là trong khi khách hàng đã đăng nhập và
thu được mã thông báo web JSON, đôi khi sau đó, JSON Web Token có thể hết hạn.
Và vì vậy nếu người dùng cố gắng truy cập từ phía khách hàng với một mã thông báo hết hạn
đến máy chủ thì máy chủ sẽ không thể xác thực người dùng.
Vì vậy, trong khoảng thời gian định kỳ, chúng tôi có thể muốn vượt qua kiểm tra để đảm bảo rằng
mã thông báo web JSON vẫn còn hợp lệ.
Vì vậy, đó là lý do tại sao tôi bao gồm một điểm cuối gọi là
CheckJWTToken, vì vậy nếu bạn làm một get để CheckJWTToken.
Bằng cách bao gồm mã thông báo vào tiêu đề ủy quyền,
sau đó cuộc gọi này sẽ trả về một true hoặc false để cho bạn biết
liệu mã thông báo web JSON vẫn còn hợp lệ hay không.
Nếu nó không hợp lệ thì phía khách hàng có thể bắt đầu đăng nhập khác cho
người dùng để có được một mã thông báo web JSON mới, nếu cần.
Vì vậy, để làm điều này, chúng ta sẽ nói cors, CorsWithOptions và,
req, res, ở đây, như mong đợi.
Và ở đây chúng ta sẽ nói,
passport.authenticate ('jwt',
và, {session: false}).
Và điều này sẽ trả lại lỗi, người dùng, thông tin.
Vì vậy, nhớ lại cách chúng tôi sử dụng trình xác thực hộ chiếu trước đó.
Vì vậy, phiên JWT rơi ở đây.
Vì vậy, trước đó ở đây chúng ta nói, passport.authenticate địa phương.
Vì vậy, đây là để xác thực địa phương.
Vì vậy, điều này là để xác thực mã thông báo web JSON.
Vì vậy, khi chúng ta gọi đó, sau đó, kể từ đó sẽ xác minh mã thông báo web JSON,
vì vậy tôi sẽ nói, nếu (err), trở lại tiếp theo (err).
Và sau đó để cho trình xử lý lỗi Express chăm sóc tình huống đó.
Và sau đó chúng ta sẽ nói, nếu (! người dùng),
Nếu người dùng không tồn tại, thì tương tự, khác.
Vì vậy, có nghĩa là nếu đối tượng người dùng được tìm thấy từ mã thông báo web JSON và
sau đó nạp vào req.user, thì điều đó có nghĩa là người dùng là người dùng hợp lệ.
Và như vậy có thể được phép tiến hành về phía trước.
Nếu không, chúng ta sẽ nói rằng người dùng không tồn tại.
Vì vậy, chúng ta cần suy ra rằng mã thông báo web JSON đã hết hạn.
Vì vậy, tại thời điểm này, chúng tôi sẽ gửi một res với mã trạng thái của,
401, do đó trái phép.
SeTheader (, 'Content-Type',
'ứng dụng/json').
Và sau đó chúng tôi sẽ trả lại res,
.json, chúng tôi sẽ nói, {status:,
'JWT không hợp lệ! '.
Và sau đó chúng tôi sẽ trả lại một lá cờ gọi là thành công: sai.
Và sau đó, Chúng tôi sẽ trả lại thông tin mà chúng tôi
có được nếu người dùng không được xác thực là lỗi tại thời điểm này.
Nếu không, điều đó có nghĩa là chúng tôi đạt được điểm này khi người dùng là người dùng hợp lệ.
Vì vậy, trong trường hợp này, hãy để tôi chỉ cần sao chép mã đó ở đây,
chúng tôi sẽ gửi một mã trạng thái của 200, và
sau đó res.json sẽ gửi JWT,
hợp lệ! , và thành công sẽ đúng.
Và phần thứ ba, chúng tôi sẽ gửi thông tin của người dùng.
Vì vậy, theo cách đó, khi điểm cuối này được gọi
với phương thức get, sau đó điều này sẽ xác minh cho dù mã thông báo là hợp lệ hay không.
Nếu mã thông báo là hợp lệ, sau đó bạn sẽ nhận được trả lời này.
Và từ cờ thành công trong bài trả lời,
bạn có thể kiểm tra xem token web JSON có hợp lệ hay không.
Và điều này rất hữu ích ở phía khách hàng.
Bây giờ hộ chiếu này ở đây, passport.authenticate ở đây,
sẽ phải được cung cấp với req và res như hai tham số ở đây.
Đó là cách chúng tôi gọi đó là passport.authenticate.
Chú ý rằng bất cứ khi nào bạn gọi passport.authenticate và
mong đợi chức năng gọi lại này ở đây, bạn cần phải nối thêm điểm này, req,
.res, đó passport.authenticate, và sau đó trở lại đây.
Vì vậy, với điều này, chúng tôi đã cập nhật mọi thứ ở phía máy chủ.
Vì vậy, hãy lưu tất cả các thay đổi ở phía máy chủ.
Vì vậy, bây giờ máy chủ của chúng tôi đã sẵn sàng để
xử lý các yêu cầu đến từ máy khách Angular của chúng tôi.
Với điều này, chúng tôi hoàn thành bài tập này.
Trong bài tập này, chúng tôi đã chuẩn bị máy chủ Express của chúng tôi để
xử lý các yêu cầu đến từ máy khách Angular của chúng tôi.
Trong bài tập tiếp theo, chúng ta sẽ xem xét máy khách Angular chi tiết hơn để
hiểu làm thế nào nó được giao tiếp với máy chủ bổ sung này.
Đây là thời điểm tốt để bạn thực hiện một Git cam kết với thông điệp,
tích hợp client và server.
[ NHẠC]