← назад в блог
daily10 августа 2026 г./3 мин чтения

Как научить вход по лицу спрашивать: «Этот номер всё ещё ваш?»

На нашем страховом сайте пользователи входят через распознавание лица с помощью MyID — национальной системы цифровой идентификации Узбекистана. Лицо подтверждает, кто вы, но не подтверждает, как с вами связаться. Поэтому я переработал авторизацию так, чтобы каждый вход также проверял, действительно ли номер телефона, привязанный к аккаунту, всё ещё принадлежит пользователю.

Снимок экрана — 2026-08-12 в 08.54.07.png

На gross.uz, страховом сайте, которым пользуются десятки тысяч человек, можно войти с помощью распознавания лица — без пароля и без ручного ввода данных. Вход работает через MyID, национальную систему цифровой идентификации. Звучит идеально. Но за этим скрывалась тихая проблема: система знала, кто вы, но часто не знала, как с вами связаться.

Проблема простыми словами

Когда пользователь входит через распознавание лица, система находит его аккаунт по паспортным данным. Но номер телефона, сохранённый в этом аккаунте, вполне может быть пятилетней давности — от SIM-карты, которую человек давно выбросил.

Почему это важно? Потому что именно на этот номер приходит всё самое важное:

  • коды подтверждения и сообщения об оплате,
  • уведомления по страховым полисам,
  • восстановление аккаунта, если что-то пойдёт не так.

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

Одно правило решило обе проблемы: единственное доказательство — введённый код

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

Новый процесс входа следует этому правилу:

  1. Пользователь проходит распознавание лица, как раньше.
  2. Если номер был подтверждён в течение последних 6 месяцев — пользователь сразу попадает в аккаунт. Для него ничего не меняется.
  3. Если подтверждение старше (аккаунт считается «устаревшим»), появляется небольшое окно: введите текущий номер, получите SMS-код, введите его — готово.
  4. Если один паспорт связан с несколькими аккаунтами, подтверждённый номер также определяет, в какой аккаунт войдёт пользователь.

Приятный побочный эффект: база пользователей постепенно лечит сама себя. Каждый вход незаметно обновляет те данные, которые устаревают быстрее всего.

Что я сделал

Работа затронула обе части продукта:

  • На сервере (PHP): после успешного распознавания лица система теперь принимает решение, а не выполняет вход вслепую. Если проверка нужна, браузеру выдаётся короткоживущий подписанный «билет» — он вообще не содержит персональных данных и умирает через 10 минут, поэтому красть его бессмысленно.
  • В браузере (Nuxt/Vue): аккуратное окно подтверждения — поле для номера, кнопка «Получить код» с защитой от частых запросов и текст, который подстраивается: в одном случае он говорит, что вы подтверждаете свой номер, в другом — что номер выбирает между аккаунтами.
  • Ничего не теряется: когда пользователь добавляет новый номер, старый не перезаписывается — он переносится в историю изменений, поэтому служба поддержки всегда видит полную историю аккаунта.

Чем я особенно доволен

Сдержанностью. Очевидный путь — построить новую инфраструктуру; вместо этого я переиспользовал систему SMS-кодов, которой сайт доверял уже много лет, и построил всю функцию поверх неё. Никаких новых движущихся частей, никаких новых мест для поломки — только одно новое правило, действующее везде: если мы не получали подтверждения от вашего телефона в течение шести месяцев — мы просим вас снова подтвердить, что он всё ещё ваш.