Разрабатываю API для мобильных клиентов на Laravel. В качестве аутентификации пользователя использую Laravel Passport и выдаю им Personal Access token при логине в систему.
Не могу придумать, как реализовать систему подтверждения email (моб. телефона - не важно) при регистрации пользователя. Необходимо, чтобы подтверждение происходило с помощью четырёхзначного числа - кода.
Традиционно сайты высылают письмо с кодом активации после отправки регистрационной формы и только после этого активируют учетную запись. Насколько я понимаю, в этом случае запись о пользователе в БД уже будет существовать. Соответственно, пока пользователь не подтвердит ее, теоретически возможно, что за это время придёт другой человек и захочет создать учётку с таким же ящиком. И тут в базе возникает 2 неактивированных записи. Рано или поздно, один из пользователей активирует аккаунт, тогда что делать со вторым? Разумеется я понимаю, что код активации временный, но эту проблему он не решает.
Мне такой подход не очень нравится. Хотелось, чтобы запись о пользователе создавалась только после того, как он подтвердил пароль и зарегистрировался. Как в таком случае устроить логику на сервере и общение с клиентом?
Я примерно надумал следующее:
Насколько безопасен такой подход и какие есть минусы? Что посоветуете?
Пользователь вводит код в поле подтверждения email и заполняет прочие поля формы регистрации
Так не работает, обычно вы сперва все заполняете, если успешно заполнили, то остается ввести только проверочный код, для активации. Поэтому вносить все-же придется :)
Вполне нормальная практика, создать табличку для неактивированных пользователей, например users_not_activated - там хранить все что пользователь ввел, чтобы перенести из этой таблички в users, ему нужно ввести правильный код.
Когда он вводит код - ищем по таблице users_not_activated по полям email-code, если нашли, то переносим в основную, и сразу-же выполняем еще один запрос на удаление всех записей в users_not_activated с текущим email. И все ;)
Если вы боитесь мусора, то я вас успокою, индексированный поиск и при нескольких миллионах будет работать быстро, поэтому проблем нет, все в пределах погрешности. Тем более что вы можете фиксировать время создания записи в эту временную таблицу, и раз в неделю подчищать старые (неактуальные) записи.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости