如何访问端点中的 sveltekit 会话?

How to access sveltekit session in endpoint?

如何在 sveltekit 的端点中访问会话?我已经试过了,但没有成功:

import { get } from 'svelte/store';    
import { getStores} from "$app/stores";

function getUser() { // <- call this at component initialization
  const { session } = getStores();
 
  return {
    current: () => get(session).user
  }
}

会话存储仅在 svelte 组件内部工作,(它在后台使用上下文)这提供了用户之间的隔离。

您可以从 src/hooks.js 导入 getSession 并传递事件以重用从请求中提取会话数据的逻辑。

正在 src/hooks.js 中填充会话存储,这样做的正常流程是

  1. handle中,添加一些数据到event.locals
  2. getSession中,使用event.locals创建会话对象。

此会话对象在客户端中作为会话存储可用,如果您使用 load 函数,则在 ssr 期间可用,但在端点中可用.

虽然端点中可用的是 locals 变量,它最初传递给 getSession 函数,因此您可以读取那个。

export async function get({ locals }) {
  // code goes here
}

请注意,这意味着本地和客户端会话之间没有同步,如果您向会话添加一些内容,端点将无法使用它。例如,要处理此问题,您必须向 cookie 添加新数据并在 handle 函数中对其进行解析。