セッション管理
概要
ユーザーが認証(Passkey、Email Code、ソーシャルログイン、またはOAuth)を完了すると、SDKがセッションを作成します。auth.session 名前空間は、そのセッションを照会、検証、更新、管理するためのメソッドを提供します。
現在のセッションの取得
現在のセッションとユーザーデータを取得します:
const { data, error } = await auth.session.get();
if (error) { console.error('セッションエラー:', error.message); return;}
if (data === null) { console.log('未認証'); return;}
console.log('ユーザー:', data.user);console.log('セッション:', data.session);レスポンス型
interface AuthSessionData { session: Session; user: User;}
interface Session { id: string; userId: string; createdAt: string; expiresAt: string;}
interface User { id: string; // または sub email?: string; name?: string; nickname?: string; email_verified?: boolean; // ...追加クレーム}認証状態の確認
軽量チェック — 完全なユーザーデータは取得しません:
const isLoggedIn = await auth.session.isAuthenticated();
if (isLoggedIn) { // 認証済みUIを表示} else { // ログインボタンを表示}これは session.get() よりも高速です。ユーザー情報を取得せずにセッションの有効性のみを確認するためです。
ユーザー情報の取得
現在のユーザーのプロフィールを取得します:
const user = await auth.session.getUser();
if (user) { console.log('メール:', user.email); console.log('名前:', user.name); console.log('認証済み:', user.email_verified);} else { console.log('未認証');}セッションの検証
現在のセッションがサーバー上でまだ有効か確認します:
const isValid = await auth.session.validate();
if (!isValid) { // セッション期限切れまたは取り消し — ログインにリダイレクト window.location.href = '/login';}validate() はサーバーに問い合わせるため、セッションの有効性を確認する必要がある場合(例:機密操作の前)に使用します。通常の確認には isAuthenticated() で十分です。
セッションの更新
セッションの有効期間を延長するために手動で更新します:
const session = await auth.session.refresh();
if (session) { console.log('セッション更新完了。新しい有効期限:', session.expiresAt);} else { console.log('更新失敗 — セッションが期限切れの可能性');}SDKは内部でセッションの自動更新を処理するため、通常は手動で呼び出す必要はありません。強制的に更新が必要な場合(例:ユーザーがプロフィールを更新した後)に使用します。
キャッシュのクリア
SDKはセッションとユーザーデータをメモリ内にキャッシュします。新しいデータを強制的に取得するにはキャッシュをクリアします:
auth.session.clearCache();
// 次の get() や isAuthenticated() の呼び出しはサーバーに問い合わせますconst { data } = await auth.session.get();サインアウト
ユーザーのセッションを終了します:
await auth.signOut();これはAuthrimサーバーのログアウトエンドポイントを呼び出し、ローカルセッション状態をクリアします。サインアウト完了後に auth:logout イベントが発行されます。
サインアウトオプション
interface SignOutOptions { /** ログアウト後のリダイレクト先(RPイニシエイテッドログアウト) */ redirectUri?: string;}
// ログアウト後に特定のページにリダイレクトawait auth.signOut({ redirectUri: 'https://myapp.com/goodbye',});ページ読み込みパターン
ページ初期化の一般的なパターン:
const auth = await createAuthrim({ issuer: 'https://auth.example.com', clientId: 'my-app',});
async function initPage() { const { data } = await auth.session.get();
if (!data) { // 未認証 — ログインUIを表示 showLoginButton(); return; }
// 認証済み — ユーザーコンテンツを表示 showUserDashboard(data.user, data.session);}
initPage();保護されたページパターン
未認証ユーザーをログインにリダイレクト:
async function requireAuth() { const isLoggedIn = await auth.session.isAuthenticated();
if (!isLoggedIn) { window.location.href = '/login'; return null; }
const { data } = await auth.session.get(); return data;}
// ページで使用const sessionData = await requireAuth();if (!sessionData) return; // リダイレクト中
// 認証済みロジックを実行showProfile(sessionData.user);