Skip to content

Сброс пароля не работает: тип password_reset отсутствует в ENUM ms3_customer_tokens.type #744

Closed

Description

@biz87

Проблема

Сброс пароля не работает: токен 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 ищет его по этому типу:

$tokenObj = $authManager->createToken($customer, 'password_reset', $ttl);   // ForgotPassword
$customer = $authManager->validateToken($token, '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

  1. added
    priority: highВажно исправить в ближайшее время
    bugSomething isn't working
    on Sep 16, 2026
  2. self-assigned this
    on Sep 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingpriority: highВажно исправить в ближайшее время

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions