パスワード忘れ
メソッド
REST メソッドを採用しています。
HTTP メソッド
POST: パスワードリセット要求
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時の URI と JSON 内のノードには snake_case を使用します。
リクエストとレスポンス
ヘッダー
メタ情報はレスポンスボディではなく、HTTP ヘッダーに設定されます。
リクエストヘッダー
Content-Type:application/json
レスポンスヘッダー
Content-Type:application/json
パスワード忘れ
URI
リクエストボディ
リクエストボディは JSON です。
バリデーションルール
| フィールド | ルール |
|---|---|
| 必須。有効なメール形式であること。 |
レスポンス(200 OK)
レスポンスは JSON です。
{
"message": "Password reset code sent",
"code_delivery_destination": "a***@example.com",
"code_delivery_medium": "EMAIL"
}
注: メールアドレスが存在するかどうかに応じてレスポンスは変わりません。ユーザー列挙攻撃を防ぐためです。メールが見つかった場合のみ
code_delivery_destinationとcode_delivery_mediumが含まれます。
認証要件
このエンドポイントは認証を要求しません。
例外処理
例外時のステータスコードは次のとおりです。
| 説明 | ステータスコード | ステータス名 |
|---|---|---|
| メール形式が不正 | 400 | Bad Request |
| サーバ内部エラー | 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
Client->>API: POST /api/v1/auth/forgot_password
API->>Validate: Validate email
Validate-->>API: Validation passed
API->>Service: forgotPassword(email)
Service->>Cognito: forgotPassword(email)
alt Email Exists
Cognito-->>Service: Code sent (delivery details)
Service-->>API: { message, codeDeliveryDestination, codeDeliveryMedium }
API-->>Client: 200 OK
else Email Not Found
Cognito-->>Service: UserNotFoundException
Service-->>API: { message: "If the email exists..." }
API-->>Client: 200 OK (same response format)
end
Routes 層
ルーティングはここで行います。Zod スキーマでメールフィールドを検証し、認証サービスに委譲します。
ソース: src/routes/v1/auth.ts:104
Services 層
ビジネスロジックの説明です。AWS Cognito にパスワードリセットコードを要求し、メールに検証コードを送信します。レスポンスはユーザー列挙を防ぐためタイミングセーフです。
ソース: src/services/auth.ts
Repositories 層
外部サービスへのアクセスです。パスワード忘れフローで AWS Cognito と連携します。
ソース: src/repositories/
セキュリティ
- メールの有無に関わらず同じレスポンスを返します(ユーザー列挙の防止)
- 検証コードは設定された時間後に失効します
- レート制限は API Gateway / Cognito 側で処理されます