0

我正在尝试使用以下代码通过 getSession Hook 使用 SvelteKit、ExpressJS 和 PassportJS 设置身份验证:

//hooks.ts
import { get } from '$lib/api';

/** @type {import('@sveltejs/kit').GetSession} */
export const getSession = async (request) => {
    const res = await get('auth/session');
    const { user } = res;
    return { user } || null;
};

之前通过端点登录过:

//login.ts
import { post as apiPost } from '$lib/api';
export async function post(request) {
    let mail = request.body.get('mail');
    let password = request.body.get('password');
    const url = 'auth/login';
    await apiPost(url, { mail, password });
}

但是每个来自服务器端的请求的 sessionID 都是不同的,所以我永远无法通过我的加载函数获取受保护路由上的会话信息。

它通过邮递员和在客户端运行的获取请求运行良好:

//login.svelte
...
const url = 'auth/login';
const payload = { mail: mail.value, password: password.value };
await post(url, payload);
...

随后:

<script>
  //foo.svelte
    import { get } from '$lib/api';
    import { onMount } from 'svelte';
    let user;
    onMount(async () => {
        user = await get('auth/session');
    });
</script>

{#if user}
    hi {user.username}
{:else}
    not logged in
{/if}

它按预期显示用户名。所以我认为这很可能不是我如何设置 express-session 或 passportjs 的问题。

有人遇到同样的问题吗?知道如何正确设置吗?

4

0 回答 0