在SvelteKit的PageLoad中访问Store异常:无法获取可写状态值
问题:SvelteKit +page.js中无法获取可写存储值,返回空值
我尝试在+page.js中访问一个可写存储(writeable),但返回空值。代码如下:
import { isAuthenticated, user } from '../../authstore'; export const load = async ({ fetch }) => { console.log ('doing load') console.log('is auth = ', isAuthenticated) if (! isAuthenticated) { throw redirect(302, '/'); } return {test:''}; }
我通过这段代码在+page.js中检查用户登录状态,若未登录则重定向至根目录,但isAuthenticated无法正常获取。请问这是因为代码运行在服务端而非客户端吗?
解答
- 核心原因就是**+page.js的load函数默认运行在服务端**,Svelte的可写存储(writable store)是客户端专属的状态管理工具,服务端无法直接读取客户端存储内的值,因此你拿到的是空值。
- 要在服务端实现登录状态校验,得用服务端可访问的凭证,比如Cookie中的会话标识:
- 在load函数中通过
cookies参数读取登录相关的Cookie - 携带该Cookie调用后端接口,校验会话的有效性
- 根据校验结果决定是否执行重定向
- 在load函数中通过
- 若想在客户端做校验,可将逻辑放在+page.svelte的
onMount钩子中,但这种方式无法在页面加载前完成重定向,会出现页面闪现的问题,服务端校验的体验更优。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

