現在の管理者(Me)取得
メソッド
REST メソッドを採用しています。
HTTP メソッド
GET: 認証済み管理者の取得
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時の URI と JSON 内のノードには snake_case を使用します。
リクエストとレスポンス
ヘッダー
メタ情報はレスポンスボディではなく、HTTP ヘッダーに設定されます。
リクエストヘッダー
Authorization:Bearer <access_token>Content-Type:application/jsonAccept:application/json
レスポンスヘッダー
Content-Type:application/json
現在の管理者の取得
URI
レスポンス(200 OK)
レスポンスは JSON です。
{
"admin": {
"id": 1,
"cognito_sub": "1111-aaaa-2222-bbbb",
"role_id": 1,
"name": "Admin User",
"created_at": 1640995200000,
"updated_at": 1640995200000,
"created_by": "1111-aaaa-2222-bbbb",
"updated_by": "1111-aaaa-2222-bbbb",
"deleted_at": null,
"deleted_by": null,
"role": {
"id": 1,
"name": "admin"
}
}
}
認証要件
Amazon Cognito が発行する JSON Web Token(JWT)を用いた認証です。Authorization ヘッダーに有効な Bearer トークンが必要です。
例外処理
例外時のステータスコードは次のとおりです。
| 説明 | ステータスコード | ステータス名 |
|---|---|---|
| トークンが欠落または無効 | 401 | Unauthorized |
| サーバ内部エラー | 500 | Internal Server Error |
処理フロー
シーケンス図
sequenceDiagram
participant Client
participant Middleware as Protected Route Middleware
participant API as Hono Router
participant Service as Auth Service
participant DB as PostgreSQL Database
Client->>Middleware: GET /api/v1/auth/me
Middleware->>Middleware: Extract Bearer token
Middleware->>Middleware: Verify JWT & session
alt Token Valid
Middleware-->>API: Auth info (sub, adminId)
API->>Service: getMe(cognitoSub)
Service->>DB: Find admin by cognito_sub
DB-->>Service: Admin record with role
Service-->>API: Admin with relations
API-->>Client: 200 OK { admin }
else Token Invalid
Middleware-->>Client: 401 Unauthorized
end
Routes 層
ルーティングはここで行います。protectedRoute ミドルウェアが JWT とセッションを検証してからハンドラが実行されます。ハンドラは認証済みユーザ情報を取り出し、認証サービスに委譲します。
ソース: apps/admin/src/routes/v1/auth.ts
Services 層
ビジネスロジックの説明です。Cognito sub で管理者レコードを検索し、関連するロールを含めて整形して返します。
ソース: apps/admin/src/services/auth.ts
Repositories 層
データベースへのアクセスです。Cognito sub による管理者検索とロールの結合を扱います。
ソース: apps/admin/src/repositories/admin.ts
セキュリティ
- ハンドラ実行前に
protectedRouteミドルウェアがトークンを検証します verifySessionによりセッションの存在を確認します- フロントの権限判定に利用できるよう、ロールを含む管理者プロフィールを返します