那么序列化的用户对象存储在哪里呢?
在短
序列化用户目的是通过从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