コンテンツにスキップ

サーバーサイド統合

概要

サーバーサイドモジュール(@authrim/sveltekit/server)は3つのレイヤーを提供します:

  1. createAuthHandle — セッションCookieを読み取り event.locals.auth を設定するSvelteKitハンドルフック
  2. ServerSessionManager — 低レベルのCookie読み書きAPI
  3. ロードヘルパー — ルート保護とデータ受け渡しのための requireAuth()createAuthLoad()

createAuthHandle

主要なサーバーフック。src/hooks.server.ts に追加します:

import { createAuthHandle } from '@authrim/sveltekit/server';
export const handle = createAuthHandle();

リクエストごとにセッションCookieを読み取り、ServerAuthContext をデシリアライズして event.locals.auth に設定します。

オプション

interface AuthHandleOptions {
/** Cookie名(デフォルト: 'authrim_session') */
cookieName?: string;
/** SameSite属性(デフォルト: 'lax') */
sameSite?: 'strict' | 'lax' | 'none';
/** Secureフラグ(デフォルト: 本番環境でtrue) */
secure?: boolean;
/** Cookieパス(デフォルト: '/') */
path?: string;
/** 有効期限(秒)(デフォルト: 604800 = 7日) */
maxAge?: number;
/** HttpOnlyフラグ(デフォルト: true) */
httpOnly?: boolean;
/** コールバックURLパス(デフォルト: ['/auth/callback']) */
callbackPaths?: string[];
}

他のフックとの組み合わせ

SvelteKitの sequence() で複数フックを合成:

import { sequence } from '@sveltejs/kit/hooks';
import { createAuthHandle } from '@authrim/sveltekit/server';
const authHandle = createAuthHandle();
const loggingHandle = async ({ event, resolve }) => {
console.log(`${event.request.method} ${event.url.pathname}`);
return resolve(event);
};
export const handle = sequence(authHandle, loggingHandle);

ServerAuthContext

event.locals.auth に設定されるデータ構造:

interface ServerAuthContext {
session: Session;
user: User;
}

SessionUser@authrim/core と同じ型です。

ロードヘルパー

requireAuth — 保護ルート

未認証ユーザーをログインページにリダイレクト:

src/routes/dashboard/+page.server.ts
import { requireAuth } from '@authrim/sveltekit/server';
export const load = requireAuth();

未認証の場合、/login?redirectTo=/dashboard にリダイレクトされます。

オプション

interface AuthLoadOptions {
/** ログインページURL(デフォルト: '/login') */
loginUrl?: string;
/** リターンパスのクエリパラメータ(デフォルト: 'redirectTo') */
redirectParam?: string;
}
// カスタムログインURL
export const load = requireAuth({
loginUrl: '/auth/signin',
redirectParam: 'returnTo',
});

カスタムデータとの組み合わせ

src/routes/dashboard/+page.server.ts
import { requireAuth } from '@authrim/sveltekit/server';
export const load = async (event) => {
// まず requireAuth() — 未認証ならリダイレクト
const { auth } = await requireAuth()(event);
// 追加データの読み込み
const dashboardData = await fetchDashboard(auth.user.id);
return {
auth,
dashboard: dashboardData,
};
};

createAuthLoad — オプショナルな認証データ

認証を必須にせず認証データを渡す:

src/routes/+layout.server.ts
import { createAuthLoad } from '@authrim/sveltekit/server';
export const load = createAuthLoad();
// { auth: ServerAuthContext | null } を返す

ルートレイアウトで使用し、全ページに認証データを提供します。

ServerSessionManager

直接的なCookie操作(上級者向け):

import {
createServerSessionManager,
type ServerSessionManager,
} from '@authrim/sveltekit/server';
const sessionManager = createServerSessionManager({
cookieName: 'authrim_session',
sameSite: 'lax',
secure: true,
httpOnly: true,
maxAge: 604800,
});

API

interface ServerSessionManager {
/** Cookieからセッションを読み取り */
get(event: RequestEvent): Promise<ServerAuthContext | null>;
/** セッションをCookieに書き込み */
set(event: RequestEvent, context: ServerAuthContext): void;
/** セッションCookieを削除 */
clear(event: RequestEvent): void;
}

APIルートでの使用

src/routes/api/profile/+server.ts
import { getAuthFromEvent } from '@authrim/sveltekit/server';
import { json, error } from '@sveltejs/kit';
export async function GET({ locals }) {
const auth = locals.auth;
if (!auth) throw error(401, '認証が必要です');
return json({ user: auth.user });
}

ユーティリティ関数

関数シグネチャ用途
getAuthFromEvent(event)(RequestEvent) → ServerAuthContext | nullイベントから認証情報を取得
getServerSessionManager(event)(RequestEvent) → ServerSessionManagerhandleから設定済みセッションマネージャーを取得
isAuthenticated(locals)({ auth? }) → boolean認証済みか確認
getUser(locals)({ auth? }) → User | nulllocalsからユーザーを取得
getSession(locals)({ auth? }) → Session | nulllocalsからセッションを取得
import { isAuthenticated, getUser } from '@authrim/sveltekit/server';
export const load = async ({ locals }) => {
if (isAuthenticated(locals)) {
const user = getUser(locals);
return { user };
}
return { user: null };
};

Cookie設定リファレンス

オプションデフォルト説明
cookieName'authrim_session'Cookie名
sameSite'lax'SameSite属性
securetrue(本番)HTTPSのみ
path'/'Cookieパス
maxAge604800(7日)有効期限(秒)
httpOnlytrueJavaScriptからアクセス不可

次のステップ