パスワード変更

要件
ログインの有無
エンドポイント /v1/users/me/password
メソッド PUT

概要

ログイン中の自分のパスワードを変更する。現在のパスワードで本人確認してから、新しいパスワードに変更する。

必要なデータ

キー 値の種類 説明
current_password String(8文字以上) 現在のパスワード(本人確認用)
new_password String(8文字以上) 新しいパスワード

レスポンス

ステータス 内容
200 変更成功
400 現在のパスワードが正しくない / バリデーションエラー
401 未認証

実装メモ(2026-07-15)

  • Rust API (handlers/users.rs::change_password) で実装。verify_password で現在のパスワードを検証し、argon2 で新しいハッシュを保存する。誤った現在パスワードは 400(メッセージ「現在のパスワードが正しくありません」)を返す。
  • OpenAPI スキーマ(apps/web/src/api/schema.d.ts)に反映済み。フロントは設定ページ(/settings)から利用。

既知の制約(未対応)

  • パスワード変更時に他のセッションは失効されない。現在のセッション方式は Redis に user_id のみを保持し、ユーザー単位でのセッション列挙・一括失効ができないため。「乗っ取り対策でパスワードを変える」用途では、既存の他セッションを締め出せない(自分の現在セッションは維持される=これは意図通り)。
  • 恒久対応には userstoken_version(または password_changed_at)列を追加し、ログイン時にセッションへ焼き込み、認証抽出時に DB 値と突き合わせて不一致なら 401 にする仕組みが必要。認証経路全体(AuthUser / CurrentUser)に影響するため本 PR の範囲外とし、別 issue で対応予定。

実装要件

  • Valkey でセッション → ユーザーID取得
  • 現在のパスワード検証(argon2)
  • PostgreSQL で password_hash 更新(updated_at も更新)
  • 必要コンポーネント: PostgreSQL、Valkey