You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit中hooks.server.ts与Auth.js同名handle函数共存方案问询

在SvelteKit的hooks.server.ts中整合Auth.js的handle与自定义逻辑

核心解决思路是将Auth.js生成的handle重命名后,作为中间件嵌套到自定义handle中,这样既能保留Auth的认证功能,又能在自定义逻辑里操作数据库。具体实现步骤如下:

  1. 在hooks.server.ts中直接初始化Auth.js,将其导出的handle重命名为authHandle(避免和自定义handle重名):
import { SvelteKitAuth } from '@auth/sveltekit';
import github from '@auth/sveltekit/providers/github';
import { GITHUB_ID, GITHUB_SECRET } from '$env/static/private';

// 初始化Auth并把它的handle重命名为authHandle
const { handle: authHandle } = SvelteKitAuth({
  providers: [github({ clientId: GITHUB_ID, clientSecret: GITHUB_SECRET })],
  // 你的其他Auth配置项...
});
  1. 编写自定义handle函数,嵌套调用authHandle,同时插入数据库操作逻辑:
export async function handle({ event, resolve }) {
  // 认证前的逻辑:比如预处理请求、查询数据库
  // 示例:await db.logRequest(event.request.url);

  // 调用Auth的认证中间件,传递当前的event和resolve
  const response = await authHandle({ event, resolve });

  // 认证后的逻辑:比如根据会话更新用户数据
  // 示例:const session = await event.locals.auth();
  // if (session) await db.updateUserLastActive(session.user.id, new Date());

  return response;
}

这样做的原理是:Auth.js的handle本身就是一个符合SvelteKit规范的中间件函数,它会负责处理认证流程、给event.locals注入auth()方法,之后再调用传入的resolve完成请求处理。通过嵌套调用,你可以在认证流程的前后自由插入自定义的数据库操作或其他逻辑。

另外,原来+layout.server.ts中的load函数不需要修改,event.locals.auth()依然能正常获取会话信息。

内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:34:57