Javascript 在没有页面重新加载的生产构建中,Sapper会话未正确设置
我正在用Sapper做一个项目,现在有点纠结于某件事——我不太明白。我将Polka用于我的服务器(它包含在模板中,所以我使用了它),将Javascript 在没有页面重新加载的生产构建中,Sapper会话未正确设置,javascript,node.js,svelte,sapper,Javascript,Node.js,Svelte,Sapper,我正在用Sapper做一个项目,现在有点纠结于某件事——我不太明白。我将Polka用于我的服务器(它包含在模板中,所以我使用了它),将cookie会话用于我的会话中间件 这是我的波尔卡配置,我还: 当用户登录时,它会在routes/login.js中处理,本质上,一些配置文件信息和令牌会在session.user上设置,请求会重定向回根路径。我正在使用@polka/send type来响应。见下文: req.session.user = { accessToken: access_toke
cookie会话
用于我的会话中间件
这是我的波尔卡配置,我还:
当用户登录时,它会在routes/login.js
中处理,本质上,一些配置文件信息和令牌会在session.user
上设置,请求会重定向回根路径。我正在使用@polka/send type
来响应。见下文:
req.session.user = {
accessToken: access_token,
name: first_name,
pic: picture.data.url
};
send(res, 302, '', {
Location: appUrl
});
在那里,我有一个用于路由/索引的预加载模块。svelte
检查会话。用户是否存在,如果存在,则重定向到仪表板:
<script context="module">
export async function preload(page, session) {
const { user } = session;
if (user) {
return this.redirect(302, "dashboard");
}
}
</script>
导出异步函数预加载(页面,会话){
const{user}=会话;
如果(用户){
返回这个。重定向(302,“仪表板”);
}
}
这一切在dev中都可以很好地工作,但是当我运行build和buildforproduction时,情况就不太好了。在login.js
中重定向后,似乎没有填充会话.user
我在preload
中获得的session
对象没有session。用户在登录后设置了session,注销时设置了session,反之亦然。用户只需将设置为null,客户端重定向到根目录,session。用户仍在填充
如果刷新浏览器,session.user
处于正确状态。无需刷新–如果我刚刚注销,我可以像登录一样四处点击,如果我刚刚登录,则不会发生任何事情,如会话。用户未定义
只是不确定为什么它可以在开发版本上工作,但不能在生产环境中工作。考虑到浏览器刷新时的session.user
状态是正确的,我猜这不是cookie中间件配置的问题。好像我错过了什么。任何帮助都将不胜感激 对于开发和生产环境,Sapper确实以不同的方式处理缓存头。这就是为什么你会这样经历
但通过更改sapper.middleware函数有一个简单的解决方案:
sapper.middleware({
session: (req, res) => {
res.setHeader('cache-control', 'no-cache, no-store')
return { user: req.session.user }
}
})
这将根据需要设置缓存控件
sapper.middleware({
session: (req, res) => {
res.setHeader('cache-control', 'no-cache, no-store')
return { user: req.session.user }
}
})