You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
API-токен работает после блокировки или отключения покупателя #733
API-токен продолжает работать после того, как покупателя заблокировали или отключили.
TokenService::resolveApiToken() проверяет только наличие токена и срок действия (isExpired()), состояние покупателя не смотрит. При изменении is_active или is_blocked в менеджере (CustomersController::update()) токены покупателя не отзываются — revokeTokens() вызывается только при входе, сбросе пароля и подтверждении email.
Проверок is_active / is_blocked на пути Web API нет: ни в TokenMiddleware, ни в контроллерах Controllers/Api/Web, ни в CustomerSessionService::buildMePayload(). Есть только в сессии витрины (CustomerPageService) и в восстановлении пароля.
Следствие: покупатель с действующим токеном после блокировки или отключения продолжает пользоваться /api/v1/customer/* — профиль, адреса, заказы, корзина — до истечения токена (ms3_customer_token_ttl, по умолчанию 7 дней). POST /api/v1/customer/token/refresh (TokenService::rotateApiToken()) состояние тоже не проверяет, так что срок можно продлевать сколько угодно.
Что сделать
Проверять is_active и is_blocked (с учётом blocked_until) там, где токен превращается в покупателя — в одном месте, которым пользуются middleware, контроллеры и rotateApiToken().
При блокировке или отключении покупателя в менеджере отзывать его API-токены.
Критерии приёмки
Токен отключённого или заблокированного покупателя получает 401 на /api/v1/customer/*
token/refresh для такого покупателя не выдаёт новый токен
Блокировка и отключение в менеджере отзывают токены
Activity