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
Сброс пароля не работает: тип password_reset отсутствует в ENUM ms3_customer_tokens.type #744
Сброс пароля не работает: токен password_reset нельзя сохранить в ms3_customer_tokens.
Колонка type — ENUM без значения password_reset:
type enum('api','refresh','magic_link','email_verification') NOT NULL
То же в модели src/Model/mysql/msCustomerToken.php ('precision' => "'api','refresh','magic_link','email_verification'"). Константы msCustomerToken — TYPE_API, TYPE_REFRESH, TYPE_MAGIC_LINK, TYPE_EMAIL_VERIFICATION.
А ForgotPassword создаёт токен с типом password_reset, и ResetPassword ищет его по этому типу:
MySQL/MariaDB со строгим sql_mode (STRICT_TRANS_TABLES, по умолчанию) — вставка падает, createToken() возвращает null. ForgotPassword пишет в журнал Failed to create reset token for customer #… и отвечает покупателю тем же успешным сообщением, что и при отправке письма. Письмо не уходит.
Нестрогий режим — MySQL записывает в ENUM пустую строку, письмо уходит, но ResetPassword по ссылке не находит токен с типом password_reset и отвечает «токен недействителен».
Проверено на dev (MariaDB 10.6.23, STRICT_TRANS_TABLES): AuthManager::createToken($customer, 'password_reset', 3600) не создаёт строку; в таблице на dev есть только токены api.
ENUM и ForgotPassword появились в одном коммите bed63b75 (16.11.2025), так что сброс пароля, по всей видимости, не работал с тех пор.
Что сделать
Миграция: добавить password_reset в ENUM (или перевести type в VARCHAR), схема и модель — синхронно.
Константа msCustomerToken::TYPE_PASSWORD_RESET вместо строки в ForgotPassword и ResetPassword.
Другие типы, которые создаёт код (api, email_verification), в ENUM есть.
Критерии приёмки
ForgotPassword создаёт токен и отправляет письмо на MySQL/MariaDB со строгим sql_mode
Ссылка из письма проходит ResetPassword
Live-тест (testbench, MySQL): создание и проверка токена password_reset
Activity