Vậy đối tượng người dùng được tuần tự hóa được lưu trữ ở đâu?
Trong ngắn
Đối tượng sử dụng tuần tự được lưu trữ trong req.user
bởi PassportJS
lấy từ req.session.passport.user
(được được phổ biến bởi Express
) với sự giúp đỡ của Passport's
deserializeUser
phương pháp.
Express
thêm id của đối tượng phiên vào cookie trên trình duyệt của người dùng, được gửi lại để thể hiện trong tiêu đề theo mọi yêu cầu. Express
sau đó lấy id từ tiêu đề và tìm kiếm cửa hàng phiên (ví dụ: Mongo hoặc bất kỳ thứ gì) và tìm mục nhập và tải nó đến req.session
.
PassportJS
sử dụng nội dung của req.session
để theo dõi người dùng xác thực với sự giúp đỡ của serializeUser
và deserializeUser
phương pháp (để biết thêm thông tin về công việc của serializeUser
và deserializeUser
xem câu trả lời của tôi trong này SO question).
Express
chịu trách nhiệm tạo phiên. khi nào các phiên được tạo? Đó là khi Express
không phát hiện cookie phiên. Vì vậy, thứ tự mà bạn sắp xếp các cấu hình session
và passport
trong tệp app
hoặc server.js
của bạn là rất quan trọng. Nếu bạn khai báo các cấu hình session
và passport
ở trên static directory configs
thì tất cả các yêu cầu cho static content
cũng sẽ nhận được một phiên, điều này không tốt.
Hãy xem câu trả lời của tôi cho SO question, nơi tôi đã đề cập đến quyền truy cập nội dung tĩnh cũng như cách áp dụng có chọn lọc passport
cho các tuyến nhất định chứ không phải mặc định (bạn có thể không cần phải xác thực tất cả tuyến đường). không cần thiết session store lookup
và de-serialization
bằng cách chỉ đính kèm phiên vào các yêu cầu ánh xạ tới URL an toàn xem bên dưới).
//selectively applying passport to only secure urls
app.use(function(req, res, next){
if(req.url.match('/xxxx/secure'))
passport.session()(req, res, next)
else
next(); // do not invoke passport
});
Có một tuyệt vời tutorial mà tôi khuyên bạn nên đọc nếu bạn muốn hiểu quy trình làm việc của PassportJS.