我正在尝试像这样实施快递和护照会议:
app.use(connect.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
cookie: {
path: "/",
httpOnly: true,
maxAge: null
},
store: redisStoreConnect,
secret: "something",
key: 'pksy.sid'
}));
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser (user, done) ->
done null, user.email
return
passport.deserializeUser (email, done) ->
User.findOne
email: email
, (err, user) ->
done err, user
return
return
如果我导航到我网站中的某个页面,则会创建一个新会话并以redis格式存储。如果我刷新该页面,会话似乎仍然存在。如果我导航到新页面,或者即使关闭选项卡并重新打开到同一页面,也会创建一个新会话。
这特别令人沮丧,因为护照只验证为我的登录页面生成的会话。如何让我的会话持续跨页?
更新:谢谢@robertklep提醒我查看浏览器实际发回的cookie(我应该开始做什么)。事实证明,浏览器正在发回正确的cookie,并且身份验证正在运行。会话实际上是持久的,但由于某种原因,每个页面请求都会创建一个新会话(浏览器未使用)。我怎么能阻止这个?
答案 0 :(得分:3)
“哦,你不知道浏览器不会发送带有favicon请求的会话cookie吗?”我的roomate说黑客,他的同类产品需要以下单行代码。
以后11个小时的调试就解决了这个问题:
app.use express.favicon()
Express正在像对待任何其他资源一样对待favicon,而浏览器正在制作一个专门的,显然没有cookie的请求。 Express假设此请求必须来自没有会话cookie的客户端,因此它为它们创建了一个新会话;一个永远不会被召唤的会议。 express.favicon()
可以节省一天的时间!
答案 1 :(得分:0)
在我的情况下,我必须使用
app.use(passport.initialize());
app.use(passport.session());
前
app.use(app.router);
希望这可以提供帮助。