我正在使用 Sapper 进行一个项目,现在一直在努力解决一些问题 - 不太清楚。我将 Polka 用于我的服务器(它包含在sveltejs/sapper-template#rollup
模板中,所以我使用它)和cookie-session
我的会话中间件。
这是我的 Polka 配置,我也在其中播种会话数据:
polka()
.use(
compression({ threshold: 0 }),
sirv('static', { dev }),
cookieSession({
name: 'session',
keys: [
'6e818055-d346-4fcb-bf56-4c7d54cb04ab',
'60f3e980-6e9c-460d-8ea7-af1fffbdb92f'
]
}),
sapper.middleware({
session: (req, res) => ({
user: req.session.user
})
})
)
.listen(PORT, err => {
if (err) console.log('error', err);
});
当用户登录时,它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
});
在那里,我有一个预加载模块用于routes/index.svelte
检查是否session.user
存在,如果存在则重定向到仪表板:
<script context="module">
export async function preload(page, session) {
const { user } = session;
if (user) {
return this.redirect(302, "dashboard");
}
}
</script>
这一切在开发中都可以正常工作,但是当我npm run build
为生产而构建时,它就不那么好了。似乎session.user
在重定向后没有填充login.js
.
我进入的session
对象在登录后preload
没有session.user
设置,反之亦然,在注销时session.user
简单地设置为 null 并且客户端被重定向到根,session.user
仍然填充。
如果我刷新浏览器,session.user
是在正确的状态。无需刷新 - 如果我刚刚注销,我可以像登录一样单击周围,如果我刚刚登录,则不会发生任何session.user
事情undefined
。
只是不确定为什么它可以在开发版本上工作,但不能在生产中工作。鉴于session.user
浏览器刷新时状态是正确的,我猜这不是 cookie 中间件配置的问题。好像我还缺少其他东西。任何帮助将不胜感激!