コンテンツにスキップ

パスワードリセット

メソッド

REST メソッドを採用しています。

HTTP メソッド

POST: パスワードリセットの確定

命名規則

クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時の URI と JSON 内のノードには snake_case を使用します。

リクエストとレスポンス

ヘッダー

メタ情報はレスポンスボディではなく、HTTP ヘッダーに設定されます。

リクエストヘッダー

  • Content-Type: application/json

レスポンスヘッダー

  • Content-Type: application/json

パスワードリセット

URI

/api/v1/auth/reset_password

リクエストボディ

リクエストボディは JSON です。

{
  "email": "admin@example.com",
  "code": "123456",
  "new_password": "NewSecurePassword123"
}

バリデーションルール

フィールド ルール
email 必須。有効なメール形式であること。
code 必須。メールで受け取った 6 桁の検証コード。
new_password 必須。8 文字以上、大文字・小文字・数字をそれぞれ 1 文字以上含むこと。

レスポンス(200 OK)

レスポンスは JSON です。

{
  "message": "Password has been reset successfully",
  "sessions_revoked": 3
}

注: sessions_revoked は、パスワードリセット後にセキュリティ上無効化されたアクティブセッションの件数です。

認証要件

このエンドポイントは認証を要求しません。パスワード忘れフローで取得した検証コードが認証の役割を果たします。

例外処理

例外時のステータスコードは次のとおりです。

説明 ステータスコード ステータス名
リクエストボディが不正、またはバリデーションエラー 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/reset_password
    API->>Validate: Validate email, code, new_password
    Validate-->>API: Validation passed

    API->>Service: resetPassword(email, code, newPassword)
    Service->>Cognito: confirmForgotPassword(email, code, newPassword)

    alt Code Valid
        Cognito-->>Service: Password updated
        Service->>DB: Find all active sessions for admin
        DB-->>Service: Active sessions list
        Service->>DB: Revoke all active sessions
        DB-->>Service: Sessions revoked (count)
        Service-->>API: { message, sessionsRevoked }
        API-->>Client: 200 OK
    else Code Invalid or Expired
        Cognito-->>Service: CodeMismatchException / ExpiredCodeException
        Service-->>API: throw UnauthorizedError
        API-->>Client: 401 Unauthorized
    end

Routes 層

ルーティングはここで行います。Zod スキーマでリクエストボディを検証し、認証サービスに委譲します。

ソース: src/routes/v1/auth.ts:140

Services 層

ビジネスロジックの説明です。検証コードを用いて AWS Cognito でパスワードリセットを確定し、セキュリティのため既存セッションをすべて失効させます。

ソース: src/services/auth.ts

Repositories 層

データベースおよび外部サービスへのアクセスです。管理者のセッション検索と一括失効を扱います。

ソース: src/repositories/

セキュリティ

  • パスワードリセット後、既存セッションはすべて失効します(全デバイスで再ログインが必要)
  • 検証コードは一度しか使用できません
  • パスワード強度は Zod と Cognito のポリシーの両方で検証されます
  • 失敗試行はセキュリティ監視のためログに記録されます