Вебформат

Главная/Блог/Сайты и e-commerce

Сайты и e-commerce9 октября 20265 мин

Покупатель меняет пароль, а сайт пишет "неверное контрольное слово": откуда в магазине на 1С-Битрикс двойные учётки

Покупательница оформила заказ, открыла ссылку из письма, чтобы задать пароль, и получила ошибку "неверное контрольное слово". Войти и оплатить заказ она не смогла. В списке пользователей на её e-mail нашлось четыре учётки. Разбираем, откуда они берутся в магазине на 1С-Битрикс с готовым решением, как проверить свой магазин одним запросом и какой настройкой это исправить.

Двойные учётки покупателя · смена пароля
Двойные учётки покупателя · смена пароля

Покупательница написала в магазин мультибрендовой женской одежды: по ссылке из письма пароль не меняется, сайт пишет "неверное контрольное слово", войти и оплатить заказ не получается. Заказ при этом оформлен и ждёт оплаты.

В магазине подумали на капчу. Капчи на форме смены пароля нет. Причина нашлась в списке пользователей: на e-mail покупательницы было заведено четыре учётки.

Откуда берутся двойные учётки

Магазин работает на 1С-Битрикс с готовым решением и разрешает покупать без входа. Человек заполняет форму заказа, сайт сам заводит ему учётку и присылает письмо со ссылкой для пароля. Регистрироваться заранее не нужно, до заказа на один шаг меньше.

Когда тот же человек приходит за второй покупкой и снова не входит в кабинет, сайт мог бы узнать его по e-mail. Он не узнаёт и заводит ещё одну учётку. Так получается, когда сходятся три обстоятельства. Каждое по отдельности выглядит безобидно.

  • 01Логин гостю сайт придумывает сам - берёт часть e-mail до знака @ - и проверяет, не занят ли он. Не занят: у прежней учётки логином записан адрес целиком.
  • 02Готовое решение после этой проверки подставляет в логин e-mail. У него включена настройка "логин = e-mail". Совпал ли новый логин с уже существующим, сайт на этом шаге не проверяет.
  • 03Проверка e-mail на уникальность в Битриксе по умолчанию выключена. Второй пользователь с тем же адресом сохраняется без ошибок.

В итоге каждый заказ без входа добавляет учётку с тем же логином и тем же e-mail. У покупательницы из письма их набралось четыре.

Почему с дублями не меняется пароль

После заказа сайт отправляет письмо со ссылкой для пароля. В ссылку зашит код - то самое контрольное слово. Он выдан для новой учётки, которую сайт только что завёл.

Форма смены пароля ищет учётку по логину. Логин у всех четырёх одинаковый, и Битрикс берёт первую попавшуюся - старую. Код из письма к ней не подходит, сайт отвечает "неверное контрольное слово". Вход по паролю ломается так же: сайт сверяет пароль со старой учёткой, а заказ лежит в новой.

Как письмо и форма смены пароля попадают в разные учётки
Второй заказ без входа
тот же e-mail
покупатель в кабинет не входил
сайт заводит ещё одну учётку
Старая учётка
логин = e-mail
первый заказ
Новая учётка
логин = тот же e-mail
новый заказ
код из письма выдан для неё
покупатель открывает ссылку из письма
Форма смены пароля
ищет учётку по логину
находит старую
код к ней не подходит
"Неверное контрольное слово"
войти и оплатить заказ нельзя
Откуда берётся ошибка при смене пароля
SELECT LOWER(EMAIL), COUNT(*)
FROM b_user
WHERE ACTIVE = 'Y' AND LENGTH(EMAIL) > 0
GROUP BY 1
HAVING COUNT(*) > 1;
Запрос к базе магазина на 1С-Битрикс: e-mail, на которые заведено больше одной активной учётки

Как исправили

Исправление - одна настройка главного модуля Битрикса: "Проверять E-mail на уникальность при регистрации" на вкладке "Авторизация". С ней зарегистрироваться второй раз на занятый адрес нельзя, а повторный покупатель без входа попадает со своим заказом в прежнюю учётку.

Перед тем как включать её у себя, проверьте три вещи.

  • →Параметр оформления заказа. Заказ гостя ложится в существующую учётку, только если это разрешено в параметрах компонента оформления заказа (в коде параметр называется ALLOW_APPEND_ORDER). В нашем случае он был включён. Если выключен, сайт не сможет ни завести вторую учётку, ни положить заказ в первую, и повторный покупатель без входа заказ не оформит.
  • →Накопившиеся дубли. Настройка действует на новые заказы, старые учётки остаются. Лишние мы отключили и убрали с них e-mail покупателя, чтобы адрес остался за одной рабочей учёткой. На троих покупателей таких учёток набралось пять.
  • →Логин и обмен с 1С. У учёток с живыми заказами логин не меняли. Он входит в код покупателя, с которым заказ выгружается в 1С: сменится логин - сменится и код.

Что проверили после

Что проверялиРезультат
Регистрация с новым e-mailПроходит
Регистрация с e-mail, который уже есть на сайтеНе проходит, в том числе при другом регистре букв
Повторный покупатель без входаЗаказ привязывается к его прежней учётке
Покупатель меняет данные в своём профилеСохраняются без ошибок
Проверка после включения настройки

Живой заказ для этого не оформляли: вызывали ту же проверку, которую сайт выполняет при регистрации.

Сколько покупателей это задело

К моменту жалобы магазин продавал две недели. Дубли успели появиться у троих покупателей из семи десятков учёток на сайте. Ни один из троих не мог восстановить пароль, одна не могла оплатить заказ.

Ловушка срабатывает только на второй покупке без входа. Первый заказ проходит гладко, поэтому на запуске и на тестовых заказах её не видно. Проявляется она на тех, кто вернулся в магазин ещё раз.

Разбор причины, настройка, чистка учёток и проверка уложились в один день.


Готовое решение экономит месяцы на старте, но часть его настроек по умолчанию проявляет себя только на живых покупателях. Из той же серии: правки карточки товара, которых не видно на телефоне, и виджет оплаты, который молча теряет рассрочку. Находить и закрывать такие места - часть сопровождения магазина. А свой магазин проверьте запросом выше: пустой ответ значит, что дублей нет.

Покупатели пишут, что не могут войти?

Обсудим ваш проект - проверим учётки, оформление заказа и письма магазина и покажем, где покупатель застревает по дороге к оплате.