コンテンツにスキップ

セッション管理

ユーザーが認証(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;
emailVerified?: boolean;
// ...追加クレーム
}

現在のトークンベースセッションを確認します:

const isLoggedIn = await auth.session.isAuthenticated();
if (isLoggedIn) {
// 認証済みUIを表示
} else {
// ログインボタンを表示
}

まず保存済みトークンの有無を確認し、その後 session.get() でサーバー上のセッションを確認します。UIでユーザーデータも必要な場合は、最初から session.get() を呼んでください。

現在のユーザーのプロフィールを取得します:

const user = await auth.session.getUser();
if (user) {
console.log('メール:', user.email);
console.log('名前:', user.name);
console.log('認証済み:', user.emailVerified);
} 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('有効なセッションはありません');
}

auth.session.refresh() 自体はOAuth refresh_token grantを実行しません。ブラウザトークンのaccess token更新は、refresh tokenが利用可能で、auth.fetch() がリプレイ可能なリクエストで401を受けた場合に内部で使われます。

SDKはセッションとユーザーデータをメモリ内にキャッシュします。新しいデータを強制的に取得するにはキャッシュをクリアします:

auth.session.clearCache();
// 次の get() や isAuthenticated() の呼び出しはサーバーに問い合わせます
const { data } = await auth.session.get();

ユーザーのセッションを終了します:

await auth.signOut();

これはAuthrimサーバーのログアウトエンドポイントを呼び出し、ローカルセッション状態をクリアします。サインアウト完了後に auth:logout イベントが発行されます。

interface SignOutOptions {
/** ログアウト後のリダイレクト先(RPイニシエイテッドログアウト) */
redirectUri?: string;
/** Authrim側にトークン失効を要求 */
revokeTokens?: boolean;
/** 現在のアプリ、アプリケーショングループ、全セッションのlogout scope */
logoutScope?: 'local' | 'group' | 'global';
}
// ログアウト後に特定のページにリダイレクト
await auth.signOut({
redirectUri: 'https://myapp.com/goodbye',
revokeTokens: true,
});

広いlogout scopeには便利メソッドも使えます:

await auth.signOutApplicationGroup();
await auth.signOutAll({ revokeTokens: true });

ページ初期化の一般的なパターン:

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);