コンテンツにスキップ

コンポーネント

概要

@authrim/sveltekit/components は認証パターンのための5つのコアコンポーネントを提供します:

コンポーネント用途
AuthProviderコンテキストプロバイダー — 認証インスタンスをアプリに提供
ProtectedRouteルートガード — 未認証ユーザーをリダイレクト
SignInButtonPasskeyまたはソーシャルサインイン(状態管理込み)
SignOutButtonローディング状態付きサインアウト
UserProfile現在のユーザー情報を表示

AuthProvider

アプリをラップし、Svelteコンテキスト経由で認証クライアントを提供します。SSRセッション同期も処理します。

<script lang="ts">
import { AuthProvider } from '@authrim/sveltekit/components';
import type { AuthrimClient } from '@authrim/sveltekit';
let { data, children } = $props();
let auth: AuthrimClient | null = $state(null);
// 認証クライアントを初期化...
</script>
{#if auth}
<AuthProvider
{auth}
initialSession={data.auth?.session ?? null}
initialUser={data.auth?.user ?? null}
>
{@render children()}
</AuthProvider>
{/if}

Props

Propデフォルト説明
authAuthrimClient必須Authrimクライアントインスタンス
initialSessionSession | nullnullハイドレーション用SSRセッション
initialUserUser | nullnullハイドレーション用SSRユーザー

動作

  1. setAuthContext(auth) でコンテキストを設定 — すべての子コンポーネントで getAuthContext() が利用可能に
  2. auth._syncFromSSR() を同期的に呼び出し、最初のレンダリング前にストアを設定
  3. マウント時にバックグラウンドでセッションを再検証(オプション)
  4. 破棄時に auth.destroy() を呼び出してイベントリスナーとタイマーをクリーンアップ

コンテキストAPI

AuthProvider の子コンポーネント内で:

import { getAuthContext } from '@authrim/sveltekit';
const auth = getAuthContext();
// auth.passkey, auth.stores, auth.on() 等にアクセス

ProtectedRoute

ユーザーが認証済みの場合のみコンテンツを表示。オプションでログインページにリダイレクト。

<script lang="ts">
import { ProtectedRoute } from '@authrim/sveltekit/components';
</script>
<ProtectedRoute redirectTo="/login">
<h1>ダッシュボード</h1>
<p>保護されたコンテンツです。</p>
</ProtectedRoute>

Props

Propデフォルト説明
redirectTostring | undefined未認証ユーザーのリダイレクト先
includeReturnPathbooleantrue現在のパスをクエリパラメータに追加
returnPathParamstring'redirectTo'クエリパラメータ名
classstring''CSSクラス

スロット

スロット表示条件Props
デフォルトユーザーが認証済み
loadingセッション確認中
unauthenticated未認証で redirectTo なし
<ProtectedRoute redirectTo="/login">
<!-- 認証済みコンテンツ -->
<h1>おかえりなさい</h1>
{#snippet loading()}
<div class="spinner">セッション確認中...</div>
{/snippet}
{#snippet unauthenticated()}
<p>続けるにはサインインしてください。</p>
{/snippet}
</ProtectedRoute>

SignInButton

ローディング状態を内蔵したPasskeyまたはソーシャルサインインボタン。

<script lang="ts">
import { SignInButton } from '@authrim/sveltekit/components';
import { goto } from '$app/navigation';
</script>
<SignInButton
method="passkey"
onsuccess={() => goto('/')}
onerror={(e) => console.error(e.detail.message)}
/>
<SignInButton
method="social"
provider="google"
onsuccess={() => goto('/')}
/>

Props

Propデフォルト説明
method'passkey' | 'social''passkey'認証方式
providerSocialProvidermethod='social' 時に必須
disabledbooleanfalse無効状態
classstring''CSSクラス

イベント

イベントペイロード説明
success{ session: Session; user: User }サインイン成功
errorAuthErrorサインイン失敗
loadingAuthLoadingStateローディング状態変更

カスタムコンテンツ

<SignInButton method="passkey">
🔑 Passkeyでサインイン
</SignInButton>

SignOutButton

ローディング状態とオプションのトークン失効付きサインアウトボタン。

<script lang="ts">
import { SignOutButton } from '@authrim/sveltekit/components';
</script>
<SignOutButton
redirectUri="/goodbye"
revokeTokens={true}
onsuccess={() => console.log('サインアウト完了')}
/>

Props

Propデフォルト説明
redirectUristring | undefinedサインアウト後のリダイレクト先
revokeTokensbooleanfalseサインアウト時にトークンを失効
disabledbooleanfalse無効状態
classstring''CSSクラス

イベント

イベントペイロード説明
successvoidサインアウト成功
errorAuthErrorサインアウト失敗
loadingAuthLoadingStateローディング状態変更

UserProfile

現在のユーザーのアバター、名前、メールアドレスを表示。

<script lang="ts">
import { UserProfile } from '@authrim/sveltekit/components';
</script>
<UserProfile showAvatar={true} showEmail={true} />

Props

Propデフォルト説明
showAvatarbooleantrueアバター画像を表示
showEmailbooleantrueメールアドレスを表示
classstring''CSSクラス

スロット

スロットProps説明
デフォルト{ user }カスタムレイアウト
avatar{ user }カスタムアバター
info{ user }カスタム情報セクション
unauthenticated未認証時に表示
<UserProfile>
{#snippet avatar({ user })}
<div class="custom-avatar">
{user.displayName?.charAt(0) ?? '?'}
</div>
{/snippet}
{#snippet info({ user })}
<div>
<strong>{user.displayName}</strong>
<span>{user.email}</span>
</div>
{/snippet}
</UserProfile>

デフォルトスタイリング

  • アバター: 40×40px、円形、フォールバックアイコン付き
  • 名前: font-weight: 500
  • メール: 小さいテキスト、不透明度70%
  • コンテナ: flex row レイアウト

次のステップ