那麼序列化的用戶對象存儲在哪裏呢?
在短
序列化用戶目的是通過從req.session.passport.user
採取(其由Express
填充)與Passport's
deserializeUser
方法的幫助PassportJS
存儲在req.user
。
Express
將會話對象的id添加到用戶瀏覽器的cookie中,該cookie會在每個請求的頭部中發回。 Express
然後從標題中獲取標識並搜索會話存儲(即Mongo或其他)並找到條目並將其加載到req.session
。
PassportJS
使用的req.session
內容來跟蹤驗證用戶的用serializeUser
和deserializeUser
方法的幫助下(有關的serializeUser
和deserializeUser
工作流程的更多信息請參閱我的答案在本SO question)。
Express
負責創建會話。 何時創建會話?即Express
未檢測到會話cookie。因此,您在您的app
或server.js
文件中組織您的session
和passport
配置的順序非常重要。如果您聲明session
和passport
配置爲static directory configs
以上,則所有static content
的請求也會得到一個會話,這是不好的。
見我回答這個SO question,在那裏我有提到關於靜態內容的訪問,以及如何有選擇地應用passport
一定的路線,而不是默認的(你可能不需要所有路由認證 - 因此你能避免不必要的session store lookup
和de-serialization
通過僅將會話附加到映射到安全URLS的請求見下文)。
//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
});
有一個驚人的tutorial,我強烈建議你閱讀,如果你想了解PassportJS的工作流程。
來源
2016-02-12 11:03:08
Raf