RefreshTokenAlreadyConsumedException
extends RuntimeException
in package
FinalYes
Thrown by {@see \App\UI\Api\System\Models\Managers\UserRefreshTokenManager::rotate()} when the conditional `UPDATE ... WHERE revoked_at IS NULL` inside the transaction affects no row: another concurrent request (the same rotation, or reuse detection) has already revoked the token.
The caller (AuthPresenter::internalActionRefresh()) handles the losing side like a directly
detected replay: revokeFamily, log and failure.