withAuthQuery(クロスドメイン認証ブリッジ)
:LiTarget: 用途
別オリジンのプロジェクトへリンクを貼る時、URL クエリ ?auth=<base64> でユーザー情報を引き継ぐ。受け取り側は AuthProvider が初回 useEffect でクエリを読んで sessionStorage に保存 → クエリは history.replaceState で削除。
:LiCode: コード
const SKIP_AUTH_DOMAINS = [/* 独自認証システム */];
export function withAuthQuery(externalUrl: string, user: UserLite | null): string {
if (!user) return externalUrl;
if (SKIP_AUTH_DOMAINS.some(d => externalUrl.includes(d))) return externalUrl;
const payload = { id: user.id, name: user.name, email: user.email, /* PWは含めない */ };
const json = JSON.stringify(payload);
const utf8 = new TextEncoder().encode(json);
let bin = '';
utf8.forEach(b => { bin += String.fromCharCode(b); });
const b64 = btoa(bin);
const sep = externalUrl.includes('?') ? '&' : '?';
return `${externalUrl}${sep}auth=${encodeURIComponent(b64)}`;
}
:LiAlertCircle: 注意
- パスワードは絶対に渡さない(id/name/email/role/allowedSystems のみ)
- 独自認証ドメインは SKIP_AUTH_DOMAINS で除外(URLをきれいに保つ)