【发布时间】:2021-10-17 03:15:57
【问题描述】:
我正在尝试将 Strapi 后端连接到 SvelteKit 前端,并坚持如何保持用户登录状态,以便一切都不会在刷新或导航到新页面时重置。我试过了:
- 将 Strapi 发出的 jwt 和用户对象存储在 localStorage 中,并用它初始化 Svelte 存储。好像我已经接近了,但是a)我不能做
export const user = writable(localStorage.user),因为该代码正在浏览器中运行,我不能将它包装在if (browser) {...}中,因为导入和导出只能出现在顶层.还尝试了 hooks.js 中的一个函数来读取 localStorage 的内容并更新存储,但似乎从那里调用的函数在服务器上运行,即使它与登录时访问 localStorage 的函数相同......和加上 b) 从我收集的信息来看,将 jwt 存储在 localStorage 中是不安全的。 - 将 jwt 和用户对象存储在仅 http 的 cookie 中。 Cookie 和 http 标头似乎真的很混乱,我很难操纵它们来存储 jwt 并将其放入每个标头中。但我认为真正让我难过的是本质上相同的 SSR 问题,即从不知道如何在客户端和服务器之间成功连接。 IE。
if (browser) {...}似乎从来没有工作过,或者我无法做到,无论如何。 (如果需要,很高兴提供更多关于我在这里尝试过的代码的详细信息。这是一团糟,但它保存在 git 中。)
我知道这是每个拥有用户的应用程序都需要做的事情,所以我确信在 SvelteKit 中有一种方法可以做到这一点。但是我在网上找不到任何解释它的东西,我也无法从官方文档中弄清楚。
所以我错过了一些简单的事情吗? (可能。)或者有什么棘手的方法可以做到这一点?
【问题讨论】:
-
虽然 Brayden Girard 在此视频youtube.com/watch?v=WgX87HDrAss 中制作了有关将 Strapi 身份验证与 SvelteKit 集成的视频,但他使用 localStorage 来保持状态 - 正如您在上面的 #1 中指出的那样,不推荐使用。
标签: jwt local-storage server-side-rendering httponly sveltekit