[MUSIC]
Bây giờ chúng tôi đã hiểu được sự cần thiết phải xác thực cơ bản trong
ứng dụng Express của chúng tôi, chúng ta hãy tiến hành bài tập nơi chúng tôi sẽ thêm
xác thực cơ bản vào máy chủ Confance mà chúng tôi đã phát triển cho đến nay,
máy chủ Express REST API.
Chúng tôi sẽ, trên đường đi,
tìm hiểu cách chúng tôi có thể sử dụng xác thực cơ bản trong máy chủ của chúng tôi.
Và sau đó trong các bài tập tiếp theo, chúng tôi sẽ mở rộng ý tưởng này hơn nữa
để thêm một dịch vụ xác thực chính thức cho máy chủ Express REST API của chúng tôi.
Trong bài tập này, chúng tôi sẽ đi đến máy chủ Confect,
những gì chúng tôi đã làm việc cho đến nay.
Vì vậy, bạn phải đã hoàn thành việc thực hiện nhiệm vụ thứ hai
ngay bây giờ, nơi bạn đã có thể phát triển các chương trình khuyến mãi và mô hình lãnh đạo.
Và cũng cập nhật các tuyến đường cho bộ định tuyến dẫn đầu và bộ định
tuyến quảng cáo trong ứng dụng máy chủ Confect của bạn.
Vì vậy, trong mã này, chúng ta hãy đi đến app.js và
sau đó thêm vào xác thực cơ bản vào app.js.
Vì vậy, trong app.js như chúng ta đã hiểu về
cách giữa nó hoạt động trong ứng dụng Express.
Vì vậy, chúng tôi bắt đầu ở đây trong app.js
bằng cách nhập tất cả các module nút khác nhau ở đây.
Và sau đó, chúng tôi bắt đầu ra ở đây bằng cách đầu tiên nói app.use logger dev.
Vì vậy, tất cả những điều này sẽ được áp dụng cho ứng dụng của chúng tôi.
Và sau đó, cuộc gọi này ở đây app.use (express.static)
là những gì cho phép chúng tôi để phục vụ dữ liệu tĩnh từ thư mục công cộng.
Bây giờ, họ muốn thực hiện xác thực ngay trước khi chúng tôi
cho phép khách hàng có thể lấy dữ liệu từ máy chủ của chúng tôi.
Vì vậy, ngay tại đó, chúng tôi sẽ đi vào và thêm một huy hiệu xác thực.
Vì vậy, bạn nhận thấy rằng tất cả mọi thứ mà đến sau này,
tất cả các middleware được gắn kết và đi kèm sau điểm cụ thể này.
Chúng ta sẽ phải trải qua giai đoạn ủy quyền trước khi
phần mềm trung gian đó có thể được truy cập.
Vì vậy, ngay tại đó, tôi sẽ thêm vào app.use và
sau đó thêm một chức năng gọi là auth, mà tôi sẽ thực hiện ngay bây giờ.
Vì vậy, bằng cách làm điều này, những gì chúng tôi đang chỉ định là mặc
định, khách hàng có thể truy cập bất kỳ trong số này,
hoặc tài nguyên tĩnh của họ trong thư mục công cộng, hoặc bất kỳ tài nguyên,
món ăn, chương trình khuyến mãi hoặc nhà lãnh đạo, hoặc thậm chí người dùng như chúng ta sẽ thấy sau này.
Khách hàng phải được ủy quyền lần đầu tiên.
Vì vậy, ngay tại đó, chúng tôi sẽ thêm vào auth.
Vì vậy, hãy để tôi thêm vào các chức năng ở đây gọi là auth ngay tại đó.
Và sau đó ngay lập tức sử dụng nó trong
ứng dụng Express của chúng tôi như là middleware ở đó.
Vì vậy, chức năng này, auth sẽ mất trong ba tham số,
đối tượng yêu cầu, đối tượng tài nguyên, và đối tượng tiếp theo, yeah.
Vì vậy, trong chức năng này cho phép tôi đầu tiên,
chỉ để biết những gì được chứa trong tiêu đề yêu cầu.
Hãy để tôi chỉ cần đăng nhập các tiêu đề yêu cầu ngay tại đó chỉ để chứng minh cho bạn,
bởi vì một khi bạn thêm tiêu đề ủy quyền,
sau đó chúng tôi muốn có thể nhìn thấy nó ngay tại đó.
Vì vậy, trước tiên chúng tôi sẽ làm một bản ghi giao diện điều khiển,
chỉ để xem những gì đang đến từ phía khách hàng.
Sau đó, hãy để tôi có được
tiêu đề ủy quyền của họ bằng cách nói
req.header .authorization.
Vì vậy, đây là nơi chúng tôi sẽ nhận được giữ của tiêu đề ủy quyền được thêm vào
bởi phía khách hàng của chúng tôi.
Nếu nó không có, rõ ràng, sau đó chúng ta cần phải hành động cho phù hợp.
Vì vậy, nếu, AuthHeader là null,
có nghĩa là không có tiêu đề xác thực trong
yêu cầu đến của chúng tôi sau đó rõ ràng, khách hàng của chúng tôi đã không bao gồm tên người dùng và
mật khẩu vào tiêu đề xác thực.
Vì vậy, chúng tôi cần thách thức khách hàng của chúng tôi để cung cấp thông tin này.
Vì vậy, nếu tiêu đề ủy quyền là null, sau đó chúng ta sẽ thấy,
var err lỗi mới,
vì vậy chúng tôi sẽ không cho phép yêu cầu khách hàng của chúng tôi để đi xa hơn thời điểm này.
Vì vậy, chúng tôi sẽ nói, bạn không được chứng thực,
và sau đó chúng tôi sẽ thách thức khách hàng ở đó.
Vì vậy, chúng tôi sẽ nói res.Setheader, vì vậy
chúng tôi sẽ được thiết lập các tiêu đề trong
thông báo phản ứng nói WWW xác thực,
và từ các bài giảng trước đó,
bạn sẽ thấy lý do tại sao chúng tôi đang đặt điều này
vào tiêu đề phản ứng.
Và sau đó chúng ta sẽ nói err status.401.
401 là truy cập trái phép.
Và sau đó chúng tôi sẽ chỉ đơn giản tạo ra cuộc gọi của chúng tôi tiếp theo với tiêu đề.
Vì vậy, điều đó có nghĩa là nó sẽ bỏ qua tất cả điều này và đi đến trình xử lý lỗi,
nơi trình xử lý lỗi sẽ xây dựng thông điệp trả lời và
gửi lại cho khách hàng của tôi ở đó.
Vì vậy, đó là, nếu khách hàng đã không bao gồm tiêu đề xác thực hoặc
tiêu đề ủy quyền, sau đó tôi sẽ thách thức khách hàng để
yêu cầu nó cung cấp cho tôi tiêu đề ủy quyền ở đó.
Vì vậy, nếu không, sau đó tôi biết rằng tiêu đề ủy quyền tồn tại.
Vì vậy, ngoài thời điểm này, chúng ta sẽ nói var auth,
và tôi sẽ trích xuất các tiêu đề ủy quyền.
Và sau đó kể từ khi AuthHeader là một chuỗi,
tôi sẽ chia giá trị đó và
tiêu đề ủy quyền này, tôi sẽ chia giá trị.
Vì vậy, như bạn có thể thấy, bộ đệm cho phép bạn chia giá trị và
sau đó chúng tôi cũng cung cấp cho mã hóa của bộ đệm đó là mã hóa Base64 ở đây.
Vì vậy, chúng tôi sẽ chuyển đổi nó thành một bộ đệm bằng cách tách nó thành hai phần,
sử dụng không gian như là một phần tách.
Vì vậy, khi bạn nhìn vào tiêu đề ủy quyền, bạn thấy tại sao không gian
tách giá trị nói cơ bản, và sau đó nó cung cấp cho bạn phần còn lại
của chuỗi mã hóa Base64 chứa tên người dùng và mật khẩu.
Và từ đó, chúng tôi muốn trích xuất tên người dùng và mật khẩu.
Vì vậy, chúng tôi sẽ chia giá trị đó, và sau đó chúng tôi sẽ chỉ xem xét Vì vậy,
khi bạn chia chuỗi bằng cách sử dụng này, nó sẽ chia thành một mảng.
Và phần tử đầu tiên của mảng chứa Basic.
Yếu tố thứ hai của mảng là nơi chuỗi mã hóa base64 này tồn tại.
Vì vậy, đó là lý do tại sao chúng ta chỉ nhìn vào phần tử thứ hai của mảng này.
Vì vậy việc chia tách này sẽ làm cho chuỗi chia thành một mảng gồm hai mục.
Vì vậy, chúng tôi có thể, chúng tôi đang chọn chuỗi mã hóa base64 từ đó.
Và sau đó chúng tôi vào bộ đệm này, và sau đó chúng tôi sẽ chuyển đổi đó để chuỗi.
Và sau đó một lần nữa, chia chuỗi một lần nữa bởi vì chuỗi
chính nó sẽ chứa tên người dùng và mật khẩu được phân tách bởi dấu hai chấm.
Vì vậy, tôi sẽ chia nó bằng cách sử dụng dấu hai chấm như là
điểm tách cho chuỗi này ở đây.
Vì vậy, lưu ý rằng tôi đang tải hai chia tách ở đây, một trên không gian và
thứ hai, bằng cách sử dụng dấu hai chấm tách tên người dùng và mật khẩu.
Vì vậy, ở phần cuối của auth biến này nên là một mảng chứa hai
mục, tên người dùng và mật khẩu được trích xuất từ chuỗi base64.
Vì vậy, tại thời điểm này, những gì tôi sẽ làm là,
chỉ để rõ ràng của bạn,
Tôi sẽ chỉ đơn giản là nói var
username = auth [0] và sau đó,
var password = auth [1].
Vì vậy, bây giờ tôi đã trích xuất tên người dùng và mật khẩu từ tiêu đề ủy quyền của tôi.
Bây giờ tôi sẽ sử dụng một giá trị mặc định cho tên người dùng và
mật khẩu trong thực hiện này.
Sau đó, chúng ta sẽ thấy rằng chúng ta có thể cho phép người dùng tạo tên người dùng và
mật khẩu riêng của họ.
Nhưng cho thời điểm này, tôi sẽ chỉ sử dụng,
Tên người dùng mã hóa và mật khẩu như quản trị viên.
Và Mật khẩu sẽ chỉ là mật khẩu.
Đối với bài tập cơ bản này,
chúng tôi sẽ sử dụng điều này làm tên người dùng và mật khẩu mặc định.
Nếu tên người dùng mà tôi có được là admin và mật khẩu là mật khẩu chuỗi.
Sau đó, tôi là tất cả tốt để cho phép các
yêu cầu khách hàng sẽ được chuyển qua các middleware tiếp theo như vậy, tôi sẽ nói tiếp theo.
Vì vậy, khi tôi nói tiếp theo, điều này có nghĩa rằng từ auth
yêu cầu của họ sẽ thông qua trên tập tiếp theo của middleware ở đây và
sau đó Express sẽ cố gắng để phù hợp với yêu cầu cụ
thể là middleware cụ thể mà sẽ phục vụ yêu cầu đó.
Vì vậy, đây là nơi chúng tôi sẽ cho phép nó đi qua.
Nếu không, điều đó có nghĩa là tên người dùng và
mật khẩu không khớp với yêu cầu,
tên người dùng và mật khẩu mặc định mà tôi đang thiết lập.
Vì vậy, điều đó có nghĩa là có một lỗi.
Vì vậy, trong trường hợp này, tôi sẽ lại gây ra một lỗi ở đây,
vì vậy chúng tôi sẽ nói khác, Lỗi.
Vì vậy, chúng tôi sẽ một lần nữa tạo ra một lỗi và sau đó thách thức khách hàng để gửi
thông tin ủy quyền chính xác, tên người dùng và mật khẩu ở đây.
Vậy là vậy.
Điều này chút middleware mà chúng tôi vừa thực hiện ở đây,
ủy quyền middleware mà chúng tôi vừa thực hiện ở đây.
Là đủ để thực hiện xác thực cơ bản trong ứng dụng ra ngoài.
Vì vậy, khi thực hiện những thay đổi này, chúng ta
hãy lưu các thay đổi và sau đó chúng ta sẽ thấy cách này thực sự hoạt động trong thực tế.
Hãy lưu các thay đổi.
Và sau đó chúng tôi sẽ đi và khởi động máy chủ của chúng tôi.
Bây giờ, đi đến thiết bị đầu cuối, tất nhiên,
hãy chắc chắn rằng bạn đang MongoDB server là lên và chạy.
Nếu không, máy chủ Express của bạn sẽ không khởi động.
Vì vậy, tôi có các loại nhắc nhở npm bắt đầu, và
sau đó máy chủ Express của bạn sẽ được lên và chạy.
Bây giờ, mở trong cửa sổ ẩn danh trong trình duyệt của bạn.
Lý do tại sao tôi yêu cầu bạn sử dụng một cửa sổ ẩn danh là khi bạn nhập
tên người dùng và mật khẩu sau đó, nó sẽ được lưu trữ bởi trình duyệt của bạn.
Vì vậy, nếu bạn sử dụng một cửa sổ ẩn danh, nếu bạn khởi động lại trình duyệt...
Sau đó, bộ nhớ cache sẽ được xóa tự động,
vì vậy thông tin này sẽ không được ghi nhớ.
Bây giờ điều gì xảy ra nếu bạn nhập tên người dùng và mật khẩu, nó sẽ được lưu trữ,
vì vậy sau đó khi bạn cố gắng truy cập vào máy chủ, thông tin được lưu trữ
sẽ được tự động gửi trong yêu cầu mà bạn tạo ra.
Vì vậy, đó là lý do tại sao điều quan trọng là
sử dụng một cửa sổ ẩn danh chỉ để cho bạn thấy rằng xác thực cơ bản hoạt động.
Vì vậy, trong thanh địa chỉ trình duyệt của bạn, hãy gõ localhost:3000 và xem những gì sẽ xảy ra.
Vì vậy, khi bạn gõ localhost:3000 bạn ngay lập tức thấy rằng trình duyệt của bạn bật lên
hộp thoại này trên đầu yêu cầu bạn gõ vào tên người dùng và mật khẩu.
Nếu bạn không gõ nó, hãy để tôi gõ vào một số tên người dùng ngẫu nhiên và sau đó xem điều gì sẽ xảy ra.
Vì vậy, nếu tôi gõ vào một tên người dùng và mật khẩu ngẫu nhiên,
sau đó bạn thấy rằng yêu cầu bị từ chối.
Tôi không được phép truy cập vào máy chủ, và
sau đó nếu máy chủ sẽ một lần nữa nói rằng máy khách không được phép.
Và vì vậy nó sẽ trở lại và thách thức chúng tôi một lần nữa để xác thực chính xác.
Vì vậy, hãy để tôi gõ vào xác thực hiện tại.
Vì vậy, hãy để tôi gõ vào admin và mật khẩu làm mật khẩu.
Và sau đó đăng nhập, và bạn sẽ thấy rằng bây giờ
ứng dụng Express sẽ cho phép bạn đi vào và truy cập vào giá trị mặc định,
mà trong trường hợp này là tệp Index.html từ thư mục công cộng tĩnh đó.
Bây giờ, điều tương tự nếu bạn đang cố gắng truy cập localhost:các món ăn
mà không có sự cho phép, sau đó nó sẽ không làm việc.
Và tôi sẽ chứng minh điều đó với bạn sử dụng người đưa thư trong một phút.
Bây giờ đã nhìn thấy cách thức xác thực hoạt động, chúng ta hãy đi và
nhìn vào những gì đã xảy ra trên giao diện điều khiển trên trang web máy chủ của chúng tôi.
Đi đến giao diện điều khiển trên trang web máy chủ của chúng tôi, bạn thấy rằng một loạt các thông tin
đã được in ra ở đây, vì vậy như bạn đã thấy,
chúng tôi đã đăng xuất các tiêu đề yêu cầu ở đây.
Vì vậy, đây là yêu cầu đầu tiên đi kèm với tiêu đề yêu cầu.
Và ở đây bạn thấy rằng không có tiêu đề ủy quyền trong yêu cầu.
Và vì vậy máy chủ của bạn đã từ chối điều đó với một 401 yêu cầu khách hàng của chúng tôi để ủy quyền cho chính nó.
Lần thứ hai cũng kể từ khi chúng tôi không gõ vào chính xác ủy quyền mà
máy chủ từ chối.
Tất nhiên, bây giờ bạn nhận thấy rằng trong tiêu đề, ngay tại đó, ủy quyền
thực sự được bao gồm ở đó, và bạn thấy cách thức ủy quyền được bao gồm.
Nó nói Basic được phân cách bởi một khoảng trắng, và
được phân cách bởi chuỗi mã hóa 64 bit có chứa tên người dùng và mật khẩu.
Và sau đó, chúng ta thấy rằng máy chủ đã
từ chối điều này bởi vì ủy quyền là sai tại thời điểm đó.
Bây giờ sau đó, chúng tôi đã nhập đúng tên người dùng và mật khẩu.
Vì vậy, ngay tại đó trong yêu cầu thứ ba mà đi vào, chúng tôi gõ đúng tên người dùng và
mật khẩu.
Và như vậy, đó là lý do tại sao bạn thấy rằng tiêu đề yêu cầu chứa ủy quyền,
và chuỗi này sử dụng mã hóa chính xác của tên người dùng và mật khẩu.
Làm sao tôi biết được?
Vâng, tôi đã kiểm tra chéo và biết
rằng, đó là phiên bản mã hóa nước ngoài cơ bản của chuỗi ở đó.
Chúng tôi cũng sẽ thấy điều đó từ hình ảnh người đưa thư của chúng tôi hoặc những gì.
Bây giờ sau đó, bạn thấy rằng yêu cầu đã được chấp nhận và
nó trả về giá trị một cách chính xác.
Và sau đó tất nhiên, sau đó, khách hàng yêu cầu cho một favicon, biểu tượng.
Và vì chúng tôi không có favicon ở phía máy chủ của chúng tôi, nó trả lời với 404 và
tất nhiên biểu tượng yêu thích của bạn không được hiển thị trong thanh địa chỉ.
Vì vậy, đó là tốt, nhưng lưu ý đặc biệt.
Những yêu cầu đặc biệt đến,
nơi tiêu đề ủy quyền chính xác đã được bao gồm.
Và như vậy, nó đã thành công vào thời điểm đó.
Hãy thử xem làm thế nào chúng ta có thể làm điều tương tự với postmap.
Vì vậy, ở đây tôi có cửa sổ postmap của tôi mở ra.
Và như vậy trong cửa sổ Postman của tôi, tôi sẽ gõ vào
một get để localhost: đến máy chủ của tôi, và sau đó gửi yêu cầu và
bạn sẽ ngay lập tức nhận thấy rằng nó thách thức nói 401 trái phép.
Vì vậy, đây là thông điệp trả lời từ phía máy chủ,
vì vậy hãy chú ý những gì nó tiết kiệm, 401 trái phép.
Và nó nói rằng phản ứng phải bao gồm một lĩnh vực tiêu đề WWW xác thực.
Và điều này sẽ là thách thức khách hàng để gửi thông tin ủy quyền,
tên người dùng và mật khẩu.
Vì vậy, xem trước này, chúng ta thấy rằng các câu bạn không được chứng thực và
sau đó là mã 401 ở đây.
Bây giờ nhìn vào tiêu đề của tin nhắn trả lời.
Khi bạn nhìn vào tiêu đề của thư trả lời, bạn có thể thấy đặc biệt
tiêu đề này bao gồm ở đó, đó là www.authenticatebasic.
Bây giờ, làm thế nào để chúng ta thực hiện xác thực hoặc ủy quyền trong bưu điện?
Vì vậy, đây là nơi họ sẽ đi đến này ngay bên dưới hộp này ở đây,
bạn sẽ thấy ủy quyền này ở đây.
Và khi bạn nhấp vào ủy quyền, ngay bây giờ nó nói KHÔNG AUTH..
Hãy sử dụng xác thực cơ bản.
Vì vậy, khi tôi nói xác thực cơ bản, nó sẽ
cung cấp cho tôi hai lĩnh vực ở đây, nơi tôi có thể gõ vào tên người dùng và mật khẩu.
Hãy để tôi nhập đúng tên người dùng và mật khẩu.
Vì vậy, tôi sẽ nói tên người dùng quản trị, mật khẩu là mật khẩu P-A-S-S-W-O-R-D.
Vì vậy, bạn có thể thấy rằng, đó chính xác là mật khẩu mà chúng tôi có ở đây.
Vì vậy, khi bạn nhập tên người dùng và mật khẩu, họ sẽ nói Yêu cầu Cập nhật.
Vì vậy, khi tôi nhấp vào Yêu cầu Cập nhật, bạn sẽ thấy rằng ngay lập tức trong tiêu đề,
bạn sẽ thấy rằng
có trường này ở đây đã được thêm vào đây nói ủy quyền.
Và sau đó, bạn sẽ thấy phần thứ hai này, giá trị bạn có thể lấy.
Nó nói cơ bản và một không gian, và sau đó chuỗi đặc biệt này.
Vì vậy, nếu bạn kiểm tra chuỗi cụ thể này ở đây, đây sẽ là
chuỗi chính xác mà bạn sẽ thấy trong tiêu đề của thông điệp yêu cầu thành công.
Chú ý những gì chuỗi này nói.
Nó nói YWR một cái gì đó, và sau đó kết thúc với một Q bằng.
Đi đến thiết bị đầu cuối của chúng tôi, bạn thấy rằng yêu cầu thành công
thực sự chứa chính xác chuỗi đó ở đây.
Nó nói YWR và sau đó kết thúc bằng Q bằng ở đó.
Vì vậy, bằng cách nhập thông tin vào ủy quyền và sau đó nhấp
vào yêu cầu cập nhật, thông tin này được thêm vào các tiêu đề ủy quyền.
Vì vậy, bây giờ đây là một yêu cầu get,
tôi không cần loại nội dung có bởi vì nó không chứa bất kỳ cơ thể.
Vì vậy, bây giờ ủy quyền đã được bao gồm,
chúng ta hãy gửi yêu cầu ngay bây giờ một cách chính xác và sau đó bạn sẽ thấy rằng
câu trả lời đến từ trang web máy chủ sẽ chứa tệp chỉ mục như bạn mong đợi.
Bây giờ, để tôi xóa ủy quyền.
Bây giờ đây là lý do tại sao Postmap giúp tôi kiểm tra những điều này một
cách dễ dàng hơn, tôi có thể xóa ủy quyền và sau đó gửi yêu cầu.
Và nó vẫn sẽ chứa ủy quyền này,
bởi vì tôi đã gõ điều này vào trường ủy quyền.
Vì vậy, hãy để tôi xóa ủy quyền từ đó, và sau đó gửi yêu cầu ở đây.
Và sau đó nó nói rằng bạn không được chứng thực.
Tương tự như vậy, nếu tôi gửi yêu cầu đến các món ăn.
Trước đây, điều này làm việc tốt nhưng
bây giờ bạn thấy rằng chúng tôi đang ngăn chặn truy cập các /dishes điểm cuối cũng.
Và điều tương tự với tất cả các điểm cuối APR còn lại khác cũng.
Bạn sẽ không được phép truy cập, bởi vì phần mềm trung gian ủy quyền đến trước khi
bạn nhận được quyền truy cập vào bất kỳ điểm cuối nào
trong danh sách phần mềm trung gian cho máy chủ express của bạn.
Vì vậy, bây giờ nếu tôi bao gồm ủy quyền,
Và sau đó cập nhật yêu cầu của tôi và sau đó gửi yêu cầu đến máy chủ,
sau đó máy chủ sẽ trả lời.
Bây giờ rõ ràng tại thời điểm này cơ sở dữ liệu của tôi là trống rỗng, vì vậy
nó là trả lời với một mảng trống ở đó.
Nhưng bây giờ yêu cầu đã đi qua thành công, và
tôi có thể lấy thông tin từ vớ máy chủ.
Vì vậy, đây là một minh chứng nhanh chóng của
ủy quyền cơ bản trong ứng dụng APR nghỉ ngơi nhanh 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.
Đây là thời điểm tốt cho
bạn để làm một nhận xét get với thông điệp xác thực cơ bản.
[ NHẠC]