ID/パスワードによるログインを追加し、全画面を保護する #26

Closed
opened 2026-09-27 17:40:45 +00:00 by joe · 1 comment
Owner

背景

アプリに認証が無く、LAN/Tailscale上の誰でも個人情報・香典額の閲覧/編集/削除が可能だった。SECRET_KEYも"dev"固定だった。

実装内容(完了)

  • .envのAPP_USERNAME / APP_PASSWORD によるセッションログイン
  • ログイン画面(/login)、ログアウト(POST /logout、ヘッダーにボタン)
  • before_requestで全画面を保護。例外は/login・静的ファイル・/theme.cssのみ
  • ログイン後は要求された画面へ戻す。外部URLや//始まりのnextはダッシュボードへ
  • 認証情報が未設定の場合は警告を出し、アクセス制限なしで起動(締め出しを防ぐ)
  • SECRET_KEYは.envから読む。未設定なら起動ごとに一時キーを生成

検証

  • テスト233件パス(うち認証10件)
  • 未ログイン: /・/mourners/・Tailscale経由すべて302で/loginへ
  • 誤ったID/パスワード: 401。ログイン画面に「IDまたはパスワードが違います。」
  • /login・/theme.css・静的ファイルは公開

残タスク

  • .envのSECRET_KEYが未設定。設定するまで再起動でセッションが切れる
## 背景 アプリに認証が無く、LAN/Tailscale上の誰でも個人情報・香典額の閲覧/編集/削除が可能だった。`SECRET_KEY`も`"dev"`固定だった。 ## 実装内容(完了) - `.env`の`APP_USERNAME` / `APP_PASSWORD` によるセッションログイン - ログイン画面(`/login`)、ログアウト(`POST /logout`、ヘッダーにボタン) - `before_request`で全画面を保護。例外は`/login`・静的ファイル・`/theme.css`のみ - ログイン後は要求された画面へ戻す。外部URLや`//`始まりの`next`はダッシュボードへ - 認証情報が未設定の場合は警告を出し、アクセス制限なしで起動(締め出しを防ぐ) - `SECRET_KEY`は`.env`から読む。未設定なら起動ごとに一時キーを生成 ## 検証 - テスト233件パス(うち認証10件) - 未ログイン: `/`・`/mourners/`・Tailscale経由すべて302で`/login`へ - 誤ったID/パスワード: 401。ログイン画面に「IDまたはパスワードが違います。」 - `/login`・`/theme.css`・静的ファイルは公開 ## 残タスク - `.env`の`SECRET_KEY`が未設定。設定するまで再起動でセッションが切れる
joe closed this issue 2026-09-27 17:40:47 +00:00
Author
Owner

補足: 認証を有効にした際、開発端末の.envの認証情報をテストが読み込んでしまい、既存テスト161件が302で失敗しました。テスト用アプリではAPP_USERNAME/APP_PASSWORDを明示的にNoneにして認証を無効化するよう修正し、233件パスに戻しています(commit a37a145)。

また.envの権限が0664だったため0600に変更しました(SECRET_KEYとパスワードを含むため)。

補足: 認証を有効にした際、開発端末の`.env`の認証情報をテストが読み込んでしまい、既存テスト161件が302で失敗しました。テスト用アプリでは`APP_USERNAME`/`APP_PASSWORD`を明示的に`None`にして認証を無効化するよう修正し、233件パスに戻しています(commit `a37a145`)。 また`.env`の権限が`0664`だったため`0600`に変更しました(`SECRET_KEY`とパスワードを含むため)。
Sign in to join this conversation.
No labels
bug
cleanup
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
joe/sougi#26
No description provided.