ログイン
メソッド
REST メソッドを採用しています。
HTTP メソッド
POST: 認証
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時の URI と JSON 内のノードには snake_case を使用します。
リクエストとレスポンス
ヘッダー
メタ情報はレスポンスボディではなく、HTTP ヘッダーに設定されます。
リクエストヘッダー
Content-Type:application/json
レスポンスヘッダー
Content-Type:application/json
ログイン
URI
リクエストボディ
リクエストボディは JSON です。
バリデーションルール
| フィールド | ルール |
|---|---|
| 必須。有効なメール形式であること。 | |
| password | 必須。8 文字以上、大文字・小文字・数字をそれぞれ 1 文字以上含むこと。 |
レスポンス(200 OK)
レスポンスは JSON です。
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"name": "Admin User",
"cognito_sub": "1111-aaaa-2222-bbbb",
"email": "admin@example.com",
"role": {
"id": 1,
"name": "admin"
}
}
}
認証要件
このエンドポイントは認証を要求しません。
例外処理
例外時のステータスコードは次のとおりです。
| 説明 | ステータスコード | ステータス名 |
|---|---|---|
| リクエストボディが不正、またはバリデーションエラー | 400 | Bad Request |
| メールまたはパスワードが不正 | 401 | Unauthorized |
| サーバ内部エラー | 500 | Internal Server Error |
処理フロー
シーケンス図
sequenceDiagram
participant Client
participant API as Hono Router
participant Validate as Zod Validation
participant Service as Auth Service
participant Cognito as AWS Cognito
participant DB as PostgreSQL Database
Client->>API: POST /api/v1/auth/login
API->>Validate: Validate email & password
Validate-->>API: Validation passed
API->>Service: login(email, password, ip, user_agent)
Service->>Cognito: initiateAuth(email, password)
alt Authentication Success
Cognito-->>Service: Access Token + Cognito Sub
Service->>DB: Find admin by cognito_sub
DB-->>Service: Admin record
Service->>DB: Create session (hashed token, ip, user_agent, expires_at)
DB-->>Service: Session created
Service-->>API: { token, user }
API-->>Client: 200 OK { token, user }
else Authentication Failed
Cognito-->>Service: NotAuthorizedException
Service-->>API: throw UnauthorizedError
API-->>Client: 401 Unauthorized
end
Routes 層
ルーティングはここで行います。Zod スキーマでリクエストボディを検証し、クライアント IP と User-Agent を取り出してから認証サービスに委譲します。
ソース: src/routes/v1/auth.ts:27
Services 層
ビジネスロジックの説明です。AWS Cognito で認証し、管理者ユーザーを検索し、データベースにセッションレコードを作成して JWT を返します。
ソース: src/services/auth.ts
Repositories 層
データベースおよび外部サービスへのアクセスです。Cognito sub による管理者検索と、トークンの SHA-256 ハッシュを含むセッション作成を扱います。
ソース: src/repositories/
セキュリティ
- クライアント IP アドレスと User-Agent は監査用に記録されます
- セッショントークンはデータベースに SHA-256 ハッシュで保存されます
- ログイン失敗はリクエストコンテキスト付きでログに記録されます
- パスワードは Zod の検証と Cognito のポリシーの両方で強度チェックされます