コンテンツにスキップ

ユーザー API

システムに登録されているユーザーを取得するエンドポイント。権限設定画面で共有相手を選ぶ際に使用します。

認証・レスポンス形式・エラーの扱いは API 定義 を参照。

メソッド

HTTP メソッド

メソッド URI 概要
GET /api/users ユーザー一覧取得

リソース定義

ユーザースキーマ

フィールド データ型 備考
id string UUID
name string 表示名
email string メールアドレス。システム内で一意
isAdmin boolean 管理者かどうか

認証要件

x-user-email / x-user-name ヘッダによるユーザー認証が必要です。認証済みユーザーであれば誰でも一覧を取得できます。

ユーザー一覧取得

概要

登録済みユーザーの一覧を取得します。

ユーザーは明示的に登録するのではなく、認証されたリクエストが届いた時点で自動作成 されます。そのため、この一覧には「一度でもシステムにログインしたことがあるユーザー」が並びます。

URI

GET /api/users

レスポンス(200 OK)

{
  "ok": true,
  "data": [
    { "id": "…", "name": "設計 太郎", "email": "taro@example.com", "isAdmin": false },
    { "id": "…", "name": "管理 次郎", "email": "jiro@example.com", "isAdmin": true }
  ]
}

例外処理

説明 ステータスコード ステータス名
認証ヘッダが欠落 401 Unauthorized

処理フロー

認証ミドルウェアは、リクエストごとに次の処理を行います。

シーケンス図

sequenceDiagram
    participant Client
    participant Middleware as 認証ミドルウェア
    participant DB

    Client->>Middleware: リクエスト (x-user-email / x-user-name)
    alt ヘッダが欠落
        Middleware-->>Client: 401 Unauthorized
    else
        Middleware->>Middleware: % を含む値は URL デコードを試みる
        Middleware->>Middleware: メールアドレスを小文字化
        Middleware->>Middleware: SURVEY_ADMIN_EMAILS と照合して管理者判定
        Middleware->>DB: ユーザーを検索
        alt 存在する
            Middleware->>DB: 表示名・管理者フラグに差分があれば更新
        else 存在しない
            Middleware->>DB: ユーザーを新規作成
        end
        Middleware->>Middleware: ハンドラへ
    end

HTTP ヘッダの文字コード制限

HTTP ヘッダは ISO-8859-1 しか扱えないため、日本語の表示名は frontend 側で encodeURIComponent してから送られます。backend は % を含む値のみデコードを試み、失敗した場合は元の文字列をそのまま使います。

なりすましが可能

現状の認証はヘッダを信頼する方式のため、ヘッダを詐称すれば任意のユーザーとして操作できます。本番展開前の対応課題です(インフラストラクチャ)。