Repository navigation
fix(customer): бессрочная блокировка, отзыв токенов и password_reset - #734
Conversation
10be867 to
73bb8e3
Compare
|
Перебазировал на Конфликт только в imports PHPUnit: 39 tests, 135 assertions. Merge-tree против |
|
Проверил на dev (MariaDB, всё в транзакции с откатом):
Возвращаю из-за одного побочного эффекта. Правка покупателя делает временную блокировку бессрочной
if (array_key_exists('is_blocked', $data)) {
$customer->set('blocked_until', null);Форма менеджера ( Обнулять Не блокер, но стоит закрыть сейчасПри блокировке из менеджера отзываются только API-токены. |
Empty blocked_until is a permanent block and must not clear on login. Token resolve and manager updates now share CustomerAccess so inactive or blocked customers cannot keep or refresh API access.
ENUM lacked password_reset so ForgotPassword could not persist tokens under STRICT_TRANS_TABLES. Clear blocked_until only when is_blocked changes, revoke all token types on manager deny, and lift only timed lockouts on successful ResetPassword.
73bb8e3 to
20f919f
Compare
|
@biz87 Спасибо за проверку на dev. Побочный эффект с По обходу через reset после #744:
В эту же ветку вошёл #744: ENUM |
Описание
Ручная блокировка из менеджера (
is_blocked=1, пустойblocked_until) больше не снимается при входе.AuthManagerи витринныйcheckAuthиспользуют общий предикатCustomerAccess.API-токен после блокировки или отключения не проходит
resolveApiToken(401 на/api/v1/customer/*,token/refreshне выдаёт новый). PUT покупателя в менеджере при закрытии доступа отзывает все типы токенов и обнуляетblocked_untilтолько еслиis_blockedреально меняется (форма шлёт весь объект).Сброс пароля: в ENUM
ms3_customer_tokens.typeдобавленpassword_reset, константаTYPE_PASSWORD_RESET.ResetPasswordснимает только timed lockout, не постоянную блокировку менеджера.Тип изменений
Связанные Issues
Closes #732
Closes #733
Closes #744
Как это было протестировано?
MySQL live (
@group mysql/ testbench):CustomerAuthPdoStoreсоздаётtypeкак ENUM сpassword_reset;AuthManagerMysqlLifecycleTestнаследуетtestCreateAndValidatePasswordResetToken.composer ci:php/composer test,npm run lint:ci,composer stan/ GitHub Actions CI)Конфигурация тестирования:
fix/issue-732-733-customer-block-tokenотbetaСкриншоты (если применимо)
Чеклист
composer stan/ CI jobPHPStan)npm run lint:ciдля Vue) — Vue не трогалиДополнительные заметки
Ответ на review @biz87:
blocked_untilне обнуляется при повторном PUT с тем жеis_blocked; revoke без фильтра типа;ResetPassword→CustomerAccess::liftTimedLockout(). Phinx:20260916120000_add_password_reset_to_customer_token_type.php.