gpt4 book ai didi

session - Sapper/svelte3 session 在没有页面重新加载的情况下不同步

转载 作者:行者123 更新时间:2023-12-03 19:25:35 26 4
gpt4 key购买 nike

我无法让 Sapper 在没有页面加载的情况下同步在我的服务器端路由中所做的 session 更改。我的示例场景是我在 session 中没有用户的情况下加载我的应用程序,我的服务器端登录路由将用户设置为 session ,我使用 goto到仪表板。

问题在于session仪表板的预加载函数中的参数未填充。如果我使用 window.location.href = '/dashboard' ,是的,因为它贯穿了 Sapper 的 page_handler .但是如果我只进行客户端重定向,Sapper 不会将更新的 session 发送到客户端。

有什么办法解决这个问题吗?我使用我的工具有误吗?

注意:我正在使用 connect-pg-simple 和 express-session,像这样设置工兵:sapper.middleware({session: (req, res) => req.session.public}) .

最佳答案

我在 Sapper docs 中找到了我的答案

session contains whatever data was seeded on the server. It is a writable store, meaning you can update it with new data (for example, after the user logs in) and your app will be refreshed.



从字里行间看,这表明您的应用程序必须手动同步 session 数据。

此处的解决方案是使用 Webhook 连接、响应 header 或响应数据中的键手动将 session 数据同步到客户端。

我有一个装饰器,用于创建服务器路由处理程序,在其中将 session 数据添加到响应中。这是一个简化版本:
const createHandler = getData => (req, res) => {
res.status(200).json({data: getData(req.body), session: req.session.public})
}

显然还有更多的东西,例如错误处理,但你明白了。在客户端,我包装 fetch在一个辅助函数中,我总是使用它来获取我的 json,设置正确的标题等。在其中,我查看响应,如果有 session属性,我将其设置为 session 存储,以便它在我的 preload 中可用s。
import {stores} from "@sapper/app"

const myFetch = (...args) => fetch(...args).then(r => r.json()).then(body => {
if (body.session) stores().session.set(body.session)

return body.data
})

关于session - Sapper/svelte3 session 在没有页面重新加载的情况下不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57514247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com