Необходимо реализовать на сайте регистрацию и авторизацию через смс. Интересует часть касающаяся логики процесса на стороне сайта.
Не знаю в какую сторону копать, делать сессии или писать в базу? если в базу, то как привязать к чему-либо, если аккаунт ещё не создан?
Или все же создавать аккаунт и потом его просто активировать, но все равно вопрос - как сделать эти смс коды временными (чтобы жили 1-3 минуты)?
Создайте форму регистрации с нужными полями. В ней кнопка "Получить код регистрации". По нажатию на кнопку записываете в сессию время нажатия и отправляете код регистрации на указанный номер телефона. Ждёте ввода пользователем кода регистрации в этой самой форме. При отправке заполненной формы проверяете, что код регистрации не устарел (те самые 3 минуты), что он правильный, и только после этого регистрируете пользователя на сайте.
Фразу "сжечь" весь баланс путем отправки "холостых" смс
понимаю так - вы предполагаете, что на эту форму полезут боты и начнут заставлять сайт отправлять смс на самые разные номера.
Почитайте мой вопрос-ответ на эту тему: "Как защитить от ботов форму регистрации на сайте?".
По порядку:
Как сделать чтобы, создание аккаунта юзера происходило после подтверждения смс? Т.е. просто создать аккаунт, а затем его активировать смс кодом не хочется, чтобы кучи аккаунтов не было.
Ну создайте табличку для неактивированных пользователей. И от туда будете переносить к основным (регистрировать вручную) только в функции успешного подтверждения.
Да и если человек сразу не активирует, а потом через часа 2-3 попробует снова создать профиль, то регистрация будет выдавать ошибку о существовании данного номера в базе.
Для этого мы разрешаем дубликаты логинов и номеров, уникальным ключом будет наш самый код в СМС (это надо гарантировать). При подтверждении все дубликаты из временной таблички - удаляем, а основную запись переносим к основным.
Как сделать чтобы код жил определенное время, скажем 1-3 минуты?
Добавляем поле: время регистрации (когда была создана наша запись в БД), потом при подтверждении сравниваем текущее время и из бд, смотрим разницу.
Как защитить себя от злоумышленников, которые захотят "сжечь" весь баланс путем отправки "холостых" смс?
Обычно СМСки стоят копейки, кликать в туже рекапчу вечно, чтобы сжечь ваш баланс, злоумышленникам сразу надоест. Можно поставить лимит по IP.
Не знаю в какую сторону копать, делать сессии или писать в базу? если в базу, то как привязать к чему-либо, если аккаунт ещё не создан?
Однозначно в БД
Виртуальный выделенный сервер (VDS) становится отличным выбором