Bây giờ chúng ta đã hiểu hộ chiếu và làm thế nào hộ chiếu thêm
vào một middleware xác thực đơn giản cho ứng dụng NodeJS của chúng tôi,
và cung cấp một
cách dễ dàng để cấu hình linh hoạt và cung cấp các chiến lược khác nhau để xác thực người dùng, chúng
ta hãy đi trên một hành trình với hộ chiếu của chúng tôi.
Để bắt đầu bài tập này,
như bước đầu tiên chúng ta hãy cài đặt các
mô-đun nút hộ chiếu, hộ chiếu địa phương và hộ chiếu địa phương mongoose vào máy chủ nhầm lẫn của chúng tôi.
Vì vậy, tại dấu nhắc loại npm instal_
passport, hộ chiếu địa phương,
hộ chiếu địa phương mnus mnus trừ lưu và cài đặt ba mô-đun.
Như bạn có thể thấy tại thời điểm này chúng tôi đang bắt đầu với hộ chiếu 0.4.0, hộ
chiếu địa phương 1.0.0 và hộ chiếu địa phương mongoose 5.0.1 phiên bản trong khóa học này.
Bây giờ chúng tôi đã cài đặt hộ chiếu, hộ chiếu địa phương và hộ chiếu địa phương mongoose,
chúng ta hãy vào máy chủ nhầm lẫn và đi đến tệp user.js.
Chúng tôi sẽ cập nhật lược đồ người dùng và mô hình để sử dụng hộ chiếu địa phương-mongoose.
Để làm điều đó, ở đây chúng ta sẽ nói
var PassportLocalmongoose
yêu cầu hộ chiếu địa phương-mongoose.
Vì vậy, điều này chúng tôi sẽ cài đặt như là
các plugin mongoose trong ứng dụng của chúng tôi và chúng tôi có thể loại bỏ tên người dùng và
mật khẩu bởi vì những sẽ được tự động thêm vào bởi
các plugin hộ chiếu địa phương-mongoose ở đây và
sử dụng đó như là một plugin trong giản đồ và mô hình mongoose của chúng tôi.
Chúng tôi sẽ nói người dùng cắm vào và hộ chiếu địa phương-mongoose.
Vì vậy, điều này sẽ tự động như tôi đã nói thêm hỗ trợ cho
tên người dùng và băm lưu trữ mật khẩu bằng cách sử dụng
băm và muối và thêm
các phương pháp bổ sung trên giản đồ người dùng
và mô hình đó là hữu ích cho chứng thực hộ chiếu.
Vì vậy, một khi chúng tôi đã hoàn thành cập nhật các tập tin user.js sau đó trong thư mục dự án của
chúng tôi, chúng tôi sẽ tạo một tập tin mới và đặt tên nó là authenticate.js.
Trong tập tin authentic.js,
cho phép tôi nhập khẩu hộ chiếu.
Vì vậy, chúng tôi sẽ nói yêu cầu hộ chiếu và chúng tôi sẽ
sử dụng tập tin này để lưu trữ các chiến lược xác thực mà chúng tôi sẽ cấu hình.
Vì vậy, chúng tôi sẽ nói var. LocalStrategy yêu cầu hộ chiếu địa phương,
vì vậy các mô-đun hộ chiếu địa phương xuất khẩu một chiến lược mà chúng ta có thể sử dụng cho ứng dụng của chúng tôi.
Vì vậy, chúng tôi sẽ nói hộ chiếu local.strategy
và sau đó chúng tôi sẽ nhập khẩu người dùng từ mô hình người dùng.
Bây giờ chúng ta hãy cấu hình hộ chiếu với chiến lược địa phương mới
và sau đó chúng tôi sẽ xuất khẩu này từ tập tin này bởi vì điều này sẽ là một mô-đun nút.
Vì vậy, chúng tôi sẽ nói exports.local và chúng tôi sẽ nói hộ chiếu và bạn
có thể thấy rằng hộ chiếu hỗ trợ các phương pháp khác nhau
ở đây vì vậy chúng tôi sẽ nói sử dụng hộ chiếu và nói
LocalStrategy mới và sau đó đây là nơi
các chức năng được hỗ trợ bởi hộ chiếu địa phương-mongoose đến với sự giúp đỡ của chúng tôi.
Vì vậy, chiến lược địa phương sẽ cần phải được cung cấp với chức năng xác minh.
Bên trong chức năng này, chúng tôi sẽ xác minh người dùng.
Chức năng xác minh này sẽ được gọi với tên người dùng và mật khẩu
hộ chiếu sẽ trích xuất từ yêu cầu đến của chúng tôi.
Bây giờ trong yêu cầu đến cho LocalStrategy tên người dùng và mật khẩu
nên được cung cấp trong nội dung của tin nhắn dưới dạng một chuỗi Json.
Một lần nữa bởi vì chúng tôi đang làm cơ thể-phân tích cú pháp để sẽ được
thêm vào cơ thể của tin nhắn và sau đó từ đó hộ chiếu
chúng tôi sẽ lấy mà và sau đó sử dụng đó và cung cấp tên người dùng và mật khẩu
như các tham số để xác minh chức năng mà chúng tôi sẽ cung cấp cho LocalStrategy.
Vì chúng tôi đang sử dụng plugin mongoose hộ chiếu, plugin
mongoose tự thêm chức năng này được gọi là user.authenticate.
Vì vậy, nó thêm phương pháp này vào giản đồ người dùng và mô hình.
Chúng tôi sẽ cung cấp rằng như là chức năng
mà sẽ cung cấp xác thực cho LocalStrategy.
Bây giờ nếu bạn không sử dụng
hộ chiếu địa phương-mongoose khi bạn thiết lập một plugin mongoose mà chúng tôi đã thực hiện,
nếu bạn không sử dụng nó,
sau đó bạn cần phải viết chức năng xác thực người dùng của riêng bạn ở đây.
Trong bài giảng trước đó,
tôi đã chỉ cho bạn một chức năng xác thực người dùng đơn giản
có thể được sử dụng ở đây nhưng một trong đó được
cung cấp bởi mô-đun hộ chiếu địa phương và mongoose là
toàn diện hơn và vì vậy đó là những gì chúng tôi sẽ sử dụng trong ứng dụng của chúng tôi.
Cũng vì chúng tôi vẫn đang sử dụng phiên để theo dõi người dùng trong ứng dụng của
chúng tôi, chúng tôi cần phải serialize và deserialize người dùng.
Vì vậy, điều này về cơ bản lấy thông tin người dùng.
Bây giờ nhớ lại rằng các chứng thực hộ chiếu sẽ gắn req.user hoặc tài sản người dùng để
thông báo yêu cầu và do
đó thông tin người dùng sẽ được serialized và deserialized thực hiện bằng cách sử dụng
câu nói này serialize người dùng và hộ chiếu deserialize người dùng.
Ngoài ra chúng ta sẽ nói người dùng deserialize user.
Hai chức năng này họ serialize người dùng và deserialize người dùng được cung cấp
trên giản đồ người dùng và mô hình bằng cách sử dụng plugin hộ chiếu địa phương-mongoose ở đây.
Vì vậy, điều này sẽ chăm sóc bất cứ điều gì nó được yêu cầu cho sự
hỗ trợ của chúng tôi cho các phiên trong hộ chiếu.
Vì vậy, một khi chúng tôi đã hoàn thành bản cập nhật này cho các tập tin authenticate.js,
tập tin này sẽ yêu cầu bất cứ nơi nào nó là cần thiết cho chúng tôi để sử dụng trong xác thực của chúng tôi.
Tiếp theo đi đến tệp users.js,
trong tệp users.js,
trước tiên chúng ta sẽ nhập hộ chiếu.
Vì vậy, chúng tôi sẽ nói var hộ chiếu yêu cầu hộ chiếu.
Sau đó, bởi vì chúng tôi đang sử dụng plugin mongoose cục bộ hộ chiếu,
plugin mongoose tự cung cấp một số chỉ số
hữu ích cho chúng tôi để sử dụng trong quá trình đăng ký và trong quá trình đăng nhập.
Vì vậy, đi xuống đến bài đăng bộ định tuyến ở đây,
plugin mongoose cung cấp cho chúng ta một phương pháp được gọi là register,
trên lược đồ người dùng và mô hình.
Vì vậy, chúng tôi sẽ nói đăng ký người dùng và điều này sẽ được biến thành nói người dùng mới.
Người dùng mới này là tham số đầu tiên mà thanh ghi mất
và tham số thứ hai là mật khẩu cơ thể req.
Vì vậy, mật khẩu mà đi kèm như là một tham số thứ hai trong cơ thể của thông điệp.
Vì vậy, nhớ lại rằng tên người dùng và mật khẩu được thông qua
khi bạn đăng ký trong nội dung của tin nhắn.
Bây giờ, trong trường hợp này,
điều này sẽ dẫn đến một chức năng gọi lại cung cấp lỗi
và người dùng là hai giá trị gọi lại ở đây và không may,
điều này sau đó không hoạt động trong trường hợp này.
Vì vậy, tôi sẽ phải cắt điều này ra từ đây và sau đó
thay vì xử lý mà bên trong phương pháp callback này ở đây.
Vì vậy, hãy để tôi chỉ thụt lề này,
để nó dễ dàng hơn để xem mã ở đây.
Vì vậy, tôi sẽ nói, đăng ký người dùng và tham số đầu tiên là
một người dùng mới được tạo ra với
việc cung cấp tên người dùng ở đây và tham số thứ hai là mật khẩu,
và sau đó kết quả là chức năng gọi lại này sẽ gọi,
chúng ta sẽ nói người dùng lỗi ở đây.
Trong trường hợp này, chúng ta phải chỉnh sửa mã một chút ở đây.
Vì vậy, trong phần đầu tiên,
chúng ta sẽ nói nếu lỗi,
sau đó họ sẽ phải gửi trả lời một cách rõ ràng.
Vì vậy, tôi sẽ sao chép hai cái này ở đây.
Vì vậy, chúng tôi sẽ nói, nếu lỗi,
sau đó res mã trạng thái,
chúng tôi sẽ thiết lập này để 500 và thiết lập tiêu đề loại nội dung và sau đó,
chúng tôi sẽ thiết lập res json và sau đó lỗi, lỗi.
Vì vậy, chúng tôi sẽ xây dựng một đối tượng json với
các lỗi như là giá trị cho các thuộc tính lỗi trong đó và sau đó gửi lại này.
Vì vậy, đây là cách bạn sẽ xử lý các lỗi trong trường hợp này.
Nếu không, những gì chúng tôi làm ở đây là chúng tôi sẽ
nói hộ chiếu xác thực địa phương.
Vì vậy, nếu chúng ta sẽ sử dụng hộ chiếu để xác thực người dùng một lần nữa.
Vì vậy, chúng tôi sẽ nói hộ chiếu xác thực địa phương.
Để đảm bảo rằng việc đăng ký người dùng đã thành công.
chúng tôi sẽ cố gắng xác thực cùng một người dùng mà chúng tôi vừa đăng ký và
ở đây chúng tôi sẽ nói req res và điều này
sẽ trở lại như là một giá trị thứ ba mà chức năng bên trong đó,
chúng tôi sẽ gửi lại trả lời cho khách hàng của chúng tôi.
Vậy chúng ta sẽ nói. Để tôi gỡ bỏ cái này và sau đó thêm nó vào đây.
Bây giờ chúng ta có thể loại bỏ điều này sau
đó, bởi vì điều này sau đó là không cần thiết cho chúng tôi và đây là đóng của đăng ký người dùng.
Trong phần khác,
chúng tôi sẽ làm hộ chiếu xác thực địa phương.
Nhìn vào cú pháp ở đây.
Vì vậy, đây là hộ chiếu xác thực địa phương và sau đó,
chúng ta phải gọi chức năng này ở đây rằng các tham số req,
res và thứ ba là một chức năng gọi lại ở đây.
Vì vậy, đây là cách này được thực hiện bởi vì hộ chiếu mong bạn làm theo cách này.
Trong đây, chúng tôi sẽ thiết lập req res mã trạng thái là 200,
thiết lập tiêu đề nội dung ứng dụng json và sau đó chúng tôi sẽ
res json đăng ký trạng thái thành công và chúng tôi sẽ không vượt qua giá trị người dùng ở đây.
Thay vào đó, những gì tôi sẽ làm là tôi sẽ
đặt một lá cờ gọi là thành công ở đây thành sự thật ở đây.
Bây giờ theo cách này, về phía khách hàng của chúng tôi khi json này được nhận,
khách hàng chỉ có thể trích xuất tài sản thành công và sau đó kiểm tra xem nó có đúng
hay không để nhanh chóng kiểm tra xem đăng ký thành công hay không.
Vì vậy, đây là cách chúng tôi sẽ xử lý quá trình đăng ký người dùng ở đây.
Vì vậy, hãy chú ý làm thế nào mã đã đơn giản hóa đáng kể.
Nếu người dùng không đăng ký đúng cách,
thì điều này sẽ gửi lại lỗi một cách thích hợp và xác thực cũng sẽ không thành công.
Vì vậy, cả hai trường hợp, bạn sẽ bắt gặp tình huống khi xác thực người dùng không thành công.
Bây giờ, quá trình đăng nhập chính nó cũng được đơn giản hóa đáng kể.
Vì vậy, chúng ta không cần phải làm tất cả điều này trong lộ trình đăng nhập ở đây.
Vì vậy, tôi sẽ loại bỏ tất cả các mã này và tuyến đăng nhập này trở nên đơn giản hóa ở đây.
Bây giờ cho các tuyến đăng nhập- cho các bài đăng bộ định tuyến khi chúng tôi làm điều đó
ở đây, ở đây chúng tôi cũng mong đợi tên người dùng và mật khẩu được bao gồm
trong cơ thể của bài đăng tin nhắn đang đến cô ấy.
Không giống như trường hợp trước đó mà chúng tôi đã bao gồm điều này trong tiêu đề ủy quyền,
ở đây chúng tôi mong đợi điều này được bao gồm trong nội dung của tin nhắn gửi đến.
Vì vậy, để xác thực, chúng tôi sẽ chỉ đơn giản là nói hộ chiếu xác thực và chúng tôi sẽ nói địa phương ở đây.
Vì vậy, đây sẽ là cuộc gọi thứ hai ở đây.
Vì vậy, đây là phần mềm trung gian thứ hai ở đây mà chúng tôi sẽ cắt.
Vì vậy, khi bài đăng bộ định tuyến đi vào điểm cuối đăng nhập,
trước tiên chúng tôi sẽ gọi hộ chiếu xác thực địa phương.
Nếu điều này thành công thì điều này sẽ đến
và chức năng tiếp theo sau sẽ được thực hiện.
Nếu có bất kỳ lỗi trong việc xác thực,
hộ chiếu này xác thực địa phương sẽ tự động
gửi lại một câu trả lời cho khách hàng về sự thất bại của việc xác thực.
Vì vậy, điều đó đã được thực hiện chăm sóc.
Vì vậy, hãy lưu ý cách mã trong quá trình đăng nhập được đơn giản hóa đáng kể.
Vì vậy, nếu điều này đi qua thành công,
tôi chỉ cần kiểm tra req và res và ở đây những gì tôi sẽ làm
là tôi sẽ chỉ đơn giản là gửi lại một tin nhắn cho phía khách hàng với thông tin này ở đây.
Chúng tôi sẽ nói res mã trạng thái 200,
res thiết lập tiêu đề nội dung loại ứng dụng json và res json thành công trạng thái đúng.
Chúng tôi sẽ nói, bạn đã đăng nhập thành công.
Đó là nó. Đây là sự thay đổi mà chúng ta sẽ thực hiện cho các tập tin users.js.
Vì vậy, lưu ý làm thế nào, vì hộ chiếu người dùng,
cả quá trình đăng ký và quá trình đăng nhập,
mã đã đơn giản hóa đáng kể trong trường hợp này.
Bây giờ chúng ta sẽ tiếp tục cập nhật tập tin app.js vào app.js bây giờ.
Trong app.js ngay trên đây
chúng tôi sẽ nhập hộ chiếu.
Sau đó, chúng tôi sẽ
nhập mô-đun xác thực mà chúng tôi vừa thực hiện.
Chúng tôi sẽ nói var authenticate và trong các tập tin app.js xuống dưới đây sau khi phiên,
chúng tôi thêm app.use (passport.initialize),
và app.use (.session).
Nếu người dùng được đăng nhập,
sau đó những gì xảy ra là khi phiên được bắt đầu một lần nữa,
bạn nhớ lại rằng khi bạn đăng nhập ở đây,
bạn sẽ được đăng nhập vào đây,
và một cuộc gọi đến hộ chiếu xác thực địa phương,
khi điều này được thực hiện ở giai đoạn đăng nhập,
hộ chiếu xác thực địa phương sẽ
tự động thêm thuộc tính người dùng vào thư yêu cầu.
Vì vậy, nó sẽ thêm req.user và sau đó,
phiên hộ chiếu mà chúng tôi đã thực hiện ở đây sẽ tự động
serialize thông tin người dùng và sau đó lưu trữ nó trong phiên.
Vì vậy, và sau đó, bất cứ khi nào
một yêu cầu đến từ phía khách hàng
với cookie phiên đã có tại chỗ,
sau đó điều này sẽ tự động tải req.user vào yêu cầu đến.
Vì vậy, đó là cách phiên hộ chiếu chính nó được tổ chức.
Vì vậy, một khi điều này được thực hiện,
ngay cả mã xác thực của chúng tôi sẽ trở nên đơn giản hơn nhiều ở đây.
Vì vậy, trong mã xác thực,
chúng tôi sẽ chỉ đơn giản nói, nếu req.user.
Vì vậy, req.user sẽ được nạp vào bởi phần mềm trung gian phiên hộ chiếu tự động,
và vì vậy chúng tôi sẽ nói req.user.
Nếu không req.user chúng ta sẽ nói var err, lỗi mới,
bạn không được xác thực, và tất cả các thông điệp ở đây.
Nếu không, xem phần khác cũng bây giờ được đơn giản hóa.
Chúng ta sẽ nói khác tiếp theo.
Vì vậy, mã xác thực của bạn trở nên đơn giản hơn rất nhiều bởi vì nếu req.user không có mặt,
thì điều đó có nghĩa là xác thực đã không được thực hiện đúng như vậy,
đó là lý do tại sao bạn chỉ ra lỗi.
Nếu không, bạn sẽ được chứng thực.
Nếu req.user có mặt,
điều đó có nghĩa là hộ chiếu đã thực hiện việc xác thực và người dùng
req.user được nạp vào tin nhắn yêu cầu,
và do đó bạn chỉ có thể tiếp tục xuống xa hơn.
Vì vậy, đó là sự thay đổi mà chúng ta cần phải thực hiện để app.js.
Hãy lưu tất cả các thay đổi và sau đó nhìn vào ứng dụng trong Postman.
Sau khi bạn lưu tất cả các thay đổi, khởi động lại máy chủ của bạn.
Nếu máy chủ của bạn đang chạy,
dừng nó, và sau đó khởi động lại máy chủ của bạn.
Để tôi khởi động máy chủ của tôi.
Một khi máy chủ đang hoạt động và chạy,
chúng ta hãy truy cập Postman và thực hiện một vài yêu cầu.
Đi đến Postman, bây giờ hãy để tôi cố gắng đăng ký một người dùng mới
bằng cách thực hiện một bài đăng trên người dùng đăng ký điểm cuối.
Khi đăng ký được đăng,
bạn thấy rằng trong nội dung của thư trả lời nó nói,
thành công đúng, và đăng ký trạng thái thành công.
Vì vậy, người dùng đã được đăng ký thành công ở phía khách hàng.
Vì vậy, bây giờ, hãy để tôi làm một đăng nhập của người dùng.
Vì vậy, chúng tôi sẽ nói, “Đăng nhập”, và vẫn cung cấp
tên người dùng và mật khẩu trong nội dung của tin nhắn ở đây.
Vì vậy, khi tôi nhấp vào “Gửi”,
bạn sẽ ngay lập tức nhận thấy rằng ở phía dưới,
nó nói, thành công, đúng, và trạng thái,
bạn đã đăng nhập và sau đó trong tiêu đề chính nó,
bạn sẽ thấy một set-cookie đến bởi vì chúng tôi đang thiết lập phiên,
và sau đó bạn thấy cookie tại chỗ đó.
Khi bạn nhấp vào cookie,
bạn sẽ thấy ID phiên làm việc tại chỗ ngay tại đó.
Vì vậy, bây giờ chúng tôi đã đăng nhập thành công.
Hãy gửi một yêu cầu đến Get localhost: 3000 món ăn điểm cuối.
Bạn thấy rằng yêu cầu của bạn đã đi vào thành công và sau đó trả lời đã được gửi.
Tất nhiên, tại thời điểm này,
cơ sở dữ liệu của tôi trống vì vậy đó là lý do tại sao nó gửi lại một mảng trống
từ trang web máy chủ khi tôi yêu cầu localhost:3000/món ăn.
Điều này hoàn toàn ổn.
Bây giờ hãy để tôi đăng xuất người dùng.
Vì vậy, khi tôi đăng xuất người dùng, bây giờ,
bạn sẽ nhận thấy rằng người dùng đã được đăng xuất và khi bạn nhấp vào các cookie,
bạn sẽ nhận thấy rằng, cookie cho localhost đã biến mất.
Vì vậy, bây giờ, nếu bạn cố gắng để làm một get trên localhost:món ăn,
bạn thấy rằng câu trả lời nói,
bạn không được xác thực.
Hãy đăng nhập một lần nữa bằng cách thực hiện một bài đăng trên người dùng đăng nhập,
và sau đó, bạn thấy rằng chúng tôi có thể đăng nhập thành công tại thời điểm này.
Bạn cũng nhận thấy
rằng, cookie mới đã được thiết lập ở đây.
Sau đó, nếu chúng ta làm một get trên localhost: món ăn ở đây,
bây giờ, điều này sẽ thành công.
Kể từ khi chúng tôi đang sử dụng hộ chiếu địa phương mongoose như plugin mongoose, chúng ta
cũng hãy đi và kiểm tra máy chủ MongoDB của chúng tôi để xem
thông tin của người dùng thực sự được lưu trữ trong MongoDB của chúng tôi như thế nào.
Vì vậy, trong thiết bị đầu cuối của
bạn, bạn có thể mở gợn sóng Mongo,
vì vậy hãy nói Mongo tại thiết bị đầu cuối và sau đó kết nối với máy chủ MongoDB của chúng tôi,
và sau đó nói sử dụng Confect.
Sau đó chúng ta sẽ nói db.users.find () .pretty () và sau đó in ra thông tin của người dùng.
Vì vậy, khi bạn in ra thông tin của người dùng như bạn thấy ở đây,
có một người dùng mà chúng tôi đã đăng ký trước đó.
Vì vậy, bạn sẽ thấy rằng hồ sơ của người dùng chứa ID đối tượng và sau đó,
tên người dùng xuống dưới đây,
và cờ quản trị đó là sai và sau đó,
cũng nhận thấy rằng thay vì lưu trữ mật khẩu chính nó những gì các
plugin mongoose hộ chiếu địa phương Mông Cổ làm là nó lưu trữ
giá trị muối của nó ở đây và một giá trị băm ở đây.
Bây giờ, những gì plugin của Mongo làm là nó sẽ sử dụng muối như một cách để
mã hóa mật khẩu và cài đặt mật khẩu băm trong trường băm này ở đây.
Vì vậy, khi bạn cố gắng đăng nhập,
nó sẽ áp dụng cùng một chuyển đổi cho mật khẩu đến,
và sau đó cố gắng để phù hợp với nó với giá trị băm này được lưu trữ ở đây.
Vì vậy, bạn có thể thấy rằng trong cơ sở dữ liệu chính nó,
mật khẩu không được lưu trữ trực tiếp bên trong
giá trị băm của mật khẩu được băm bằng cách sử dụng phím muối này ở đây,
mà chúng ta thấy ở đây,
được lưu trữ trong hồ sơ đó.
Vì vậy, đó là cách plugin Mongoose hộ chiếu địa phương cho phép chúng tôi
lưu trữ thông tin người dùng trong cơ sở dữ liệu của chúng tôi.
Với sự hiểu biết nhanh chóng này về cách hộ chiếu, hộ chiếu địa phương
và hộ chiếu địa phương Mongoose giúp chúng tôi đơn giản hóa
chiến lược địa phương cho tên người dùng và mật khẩu trong ứng dụng của chúng tôi.
Chúng tôi hoàn thành bài tập này.
Đây là thời điểm tốt để bạn thực hiện một cam kết Git với hộ chiếu tin nhắn.