我正在尝试使用以下代码通过 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 的问题。
有人遇到同样的问题吗?知道如何正确设置吗?