SMS регистрация и авторизация

184
27 августа 2018, 18:30

Необходимо реализовать на сайте регистрацию и авторизацию через смс. Интересует часть касающаяся логики процесса на стороне сайта.

  1. Как сделать чтобы, создание аккаунта юзера происходило после подтверждения смс? Т.е. просто создать аккаунт, а затем его активировать смс кодом не хочется, чтобы кучи аккаунтов не было. Да и если человек сразу не активирует, а потом через часа 2-3 попробует снова создать профиль, то регистрация будет выдавать ошибку о существовании данного номера в базе.
  2. Как сделать чтобы код жил определенное время, скажем 1-3 минуты?
  3. Как защитить себя от злоумышленников, которые захотят "сжечь" весь баланс путем отправки "холостых" смс?

Не знаю в какую сторону копать, делать сессии или писать в базу? если в базу, то как привязать к чему-либо, если аккаунт ещё не создан?

Или все же создавать аккаунт и потом его просто активировать, но все равно вопрос - как сделать эти смс коды временными (чтобы жили 1-3 минуты)?

Answer 1

Создайте форму регистрации с нужными полями. В ней кнопка "Получить код регистрации". По нажатию на кнопку записываете в сессию время нажатия и отправляете код регистрации на указанный номер телефона. Ждёте ввода пользователем кода регистрации в этой самой форме. При отправке заполненной формы проверяете, что код регистрации не устарел (те самые 3 минуты), что он правильный, и только после этого регистрируете пользователя на сайте.

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

Почитайте мой вопрос-ответ на эту тему: "Как защитить от ботов форму регистрации на сайте?".

Answer 2

По порядку:

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

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

Да и если человек сразу не активирует, а потом через часа 2-3 попробует снова создать профиль, то регистрация будет выдавать ошибку о существовании данного номера в базе.

Для этого мы разрешаем дубликаты логинов и номеров, уникальным ключом будет наш самый код в СМС (это надо гарантировать). При подтверждении все дубликаты из временной таблички - удаляем, а основную запись переносим к основным.

Как сделать чтобы код жил определенное время, скажем 1-3 минуты?

Добавляем поле: время регистрации (когда была создана наша запись в БД), потом при подтверждении сравниваем текущее время и из бд, смотрим разницу.

Как защитить себя от злоумышленников, которые захотят "сжечь" весь баланс путем отправки "холостых" смс?

Обычно СМСки стоят копейки, кликать в туже рекапчу вечно, чтобы сжечь ваш баланс, злоумышленникам сразу надоест. Можно поставить лимит по IP.

Не знаю в какую сторону копать, делать сессии или писать в базу? если в базу, то как привязать к чему-либо, если аккаунт ещё не создан?

Однозначно в БД