Files
Gnuboard7/app/Exceptions/Auth/AccountLockedException.php
T
2026-05-11 11:29:41 +09:00

35 lines
1.1 KiB
PHP

<?php
namespace App\Exceptions\Auth;
use Illuminate\Support\Carbon;
use Symfony\Component\HttpKernel\Exception\HttpException;
/**
* 계정 잠금 예외 — 보안 환경설정의 `max_login_attempts` 도달 후
* `login_lockout_time` 분 동안 로그인 시도를 차단할 때 발생합니다.
*
* HTTP 423 Locked 응답으로 매핑되며, 프론트엔드 토스트는 다국어 키
* `auth.account_locked` 로 잔여 분(`minutes` 플레이스홀더)을 노출합니다.
*
* 컨트롤러는 본 예외를 별도로 catch 하여 ResponseHelper 응답을 만들거나,
* 글로벌 예외 핸들러가 자동으로 423 JSON 응답으로 변환합니다.
*
* @since 7.0.0
*/
class AccountLockedException extends HttpException
{
public function __construct(
public readonly Carbon $lockedUntil,
public readonly int $remainingMinutes,
?string $message = null,
) {
parent::__construct(
423,
$message ?? 'auth.account_locked',
null,
['Retry-After' => max(1, $remainingMinutes * 60)]
);
}
}