しくみの詳細
goodnight-web の部品ごとに、何をするか、どう動くか、なぜそう作るかを説明します。
部品ごとに 1 ページずつ、動きの要点、実際のコードの抜粋、そう作った理由をまとめています。
コードの抜粋は短く、リポジトリからそのまま写したものです。抜粋の上にファイルのパスがあるので、リポジトリでファイル全体を確認できます。
- 問い合わせフォームの保護: サーバー側での Turnstile の検証、honeypot、ルールによるスパムスコア、Rate Limiting binding。
- Passkey でのログイン: Better Auth の Passkey でログインするしくみと、パスワードを使わない理由。
- 最初の管理者の作成:
APP_SECRETとADMIN_EMAILSで、知らない人が最初の管理者になるのを防ぐしくみ。 - Passkey が使えないとき、失くしたとき: Passkey が使える環境と、D1 を手で書き換えて管理者を取り戻す手順。
- Cron を使わない古いデータの削除: 定期実行のジョブなしで保持期間を守るしくみ。
- Slack 通知: 応答の後に送る、個人情報を含まない短い通知。
- 生の IP アドレスを保存しない: IP アドレスを保存せず、HMAC だけを残すしくみと理由。