BetterAuthのD1アダプタはDrizzle一択
kysely-d1はCF Workers本番でFailed to initialize database adapterエラー。drizzle-orm + drizzleAdapterが正解。
import { drizzleAdapter } from 'better-auth/adapters/drizzle';
import { drizzle } from 'drizzle-orm/d1';
import * as authSchema from './auth-schema';
const drizzleDb = drizzle(db, { schema: authSchema });
betterAuth({
database: drizzleAdapter(drizzleDb, { provider: 'sqlite', schema: authSchema }),
});
schema必須 — 渡さないとThe model "verification" was not foundエラー。Drizzleスキーマでuser, session, account, verificationの4テーブルを定義して渡す。
認証必須アプリはSPAモードでよい
SEO不要なアプリでssr: trueは百害あって一利なし。src/routes/+layout.tsにexport const ssr = falseで解決。SSR起因のブラウザAPI問題(window未定義等)が全て消える。
ローカル開発でD1を使うには
svelte.config.jsのplatformProxy設定 + ローカルD1マイグレーション適用が必要:
wrangler d1 execute DB_NAME --local --file ./migrations/0001_initial.sql
vite devでplatform.env.DBがundefinedになる場合、.wrangler/state/v3/にローカルDBが存在しないのが原因。