コンテンツにスキップ

セッション管理

概要

ユーザーが認証(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);

次のステップ