Appearance
/mypage 公開トークン失効ポリシー
目的
候補者の /mypage・/hr-mypage 公開URLを自動で無効化し、トークン漏えい時の被害継続を防ぐ。
発行からの有効期間(1ヶ月)
- 公開トークンは 発行から1ヶ月 で期限切れになる(
public_token_expires_atに発行時点+1ヶ月をセット)。 - 対象:
candidates(作成時のトークン自動発行・再発行)、hr_candidates(再発行・書類選考通過時の発行)。 - 期限切れ後は管理画面の「再発行」で新しいURLを発行できる(新トークン + 新たに1ヶ月の有効期限)。 ただし下記の終了ステータスの候補者は再発行しても復活しない。
- ポリシー導入時に有効期限未設定だった既存トークンは、移行猶予として適用時点+1ヶ月で失効する (
20260803100000_backfill_public_token_expiration.sql)。
失効対象ステータス
candidates.status_id が以下のいずれかに変更された時点で失効する。
- 11: 入社
- 12: 音信不通
- 13: 活動終了(ヒアリング)
- 14: 活動終了(キャリア)
- 19: 活動終了(選考中)
挙動
candidates.public_token_expires_atに現在時刻をセットする(有効期限が残っていても即時失効)。- 終了ステータスで失効したトークンは 復活しない(再発行しても有効期限は延長されない)。
- /mypage へのアクセスは 404(無効トークン扱い)となる。
実装方針
- 有効期限の計算・判定は
backend/src/domain/services/PublicTokenPolicy.tsに集約する。 - バックエンドの候補者ステータス更新処理で失効日時を設定する。
- 公開APIは
public_token_expires_at IS NULL OR > now()の条件を満たす場合のみ有効。 - 既に終了状態の候補者はマイグレーションで一括失効する。
ユーザー向け文言
- 管理画面のURL表示欄と /mypage の無効画面に、 「弊社(notari)担当者にお問い合わせください」 の文言を追加する。