認証機能(Authentication)

3つのアプリ共通の、メールアドレス/パスワードによるログイン基盤。ユーザーのロールに応じて利用アプリが分かれる。

横断基盤(3アプリ) NextAuth / Credentials 独自 Session 記録

概要

ユーザー画面・組織管理画面・システム管理画面の3アプリは、いずれも NextAuth の Credentials プロバイダ (メールアドレス+パスワード)でログインする。ログイン時に独自の Session レコードを作成し、 JWT の sub にそのセッションIDを格納する。

ロールとアプリの対応

ロールフラグ利用アプリapplicationType
一般ユーザーなしユーザー画面(apps/user)User
組織管理者isOrganizationManager組織管理画面(apps/organization-manager)OrganizationManager
システム管理者isSystemManagerシステム管理画面(apps/system-manager)SystemManager

ログインの流れ

  1. サインイン画面(/sign-in)でメールアドレス・パスワードを入力。
  2. Credentials プロバイダが認証。成功時、JWT コールバックで Session を作成(applicationType / IP / UA / debugOrganizationId)。
  3. JWT の subsession.id を格納。Cookie 名は myAuthCookie
  4. 以降、auth() がセッションから user(+ organization)を解決して提供。

デバッグログイン

特定ユーザー・組織としてログインして動作確認するための経路 (/sign-in/debug/users/[userId]/organizations/[organizationId]、ユーザー画面・組織管理画面に存在)。 入口はシステム管理画面の組織詳細/organizations/[organizationId])の「ユーザー/組織管理者としてログイン」ボタンで、そこから対象アプリのデバッグ経路へ遷移する。 作成されるセッションに debugOrganizationId(一時組織ID)が記録される。

関連データモデル

Session

prisma/schema/session.prisma

  • userId / applicationType
  • ipAddress / userAgent
  • debugOrganizationId? デバッグ用一時組織

User

prisma/schema/user.prisma

  • email / password
  • isOrganizationManager / isSystemManager
  • organizationId 所属組織

主要な実装(参照)

関連:ユーザー設定画面(apps/user)

ユーザー画面のモバイル版に設定画面/v/settings)がある。アカウント情報(契約名=組織名/ログインユーザー名・メール)の表示、ログアウト、 そしてロールに応じた他アプリへの導線を提供する。

開発セッション履歴

本ドキュメントは既存実装をもとに遡及作成。今後の改修は sessions/ 配下に追記する。