Система регистрации по приглашениям

227
15 декабря 2016, 15:53

Привет всем!

Может кто-то подсказать как реализовать систему регистрации по инвайтам? Я представляю примерно так:

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

Подскажите, пожалуйста, как реализовать?

Создание регистрации и подтверждения e-mail'a я реализовать смогу, в вот всё, что связано с инвайтами...

Answer 1

В таблице инвайтов можно хранить ещё id юзера, который получил инвайт, и id юзера, который по нему зарегистрировался.

  • при регистрации проверяете, есть ли такой инвайт в таблице и не присвоен ли ему уже id зарегистрированного юзера. Если присвоен - инвайтом кто-то уже воспользовался, предлагаем пользователю ввести другой инвайт. Если не присвоен - регистрация успешна, присваиваем введенному инвайту id свежезарегистрированного юзера.
  • при успешной регистрации добавляете в таблицу с инвайтами ещё два. Этим инвайтам присваиваете id получившего юзера.
  • на странице профиля юзера с доступными ему инвайтами - выводите все инвайты, id получившего которые соответствует id юзера и у которых пустое поле зарегистрировавшегося юзера
Answer 2

Я прокоментирую:

В базе генерируются рандомные 5000 инвайтов.

зачем ? просто генерируйте инвайт когда нужно, если глобальное кол-во ограничено, храните счетчик или делайте count().

Пользователи при регистрации вводят логин, пароль,e-mail и инвайт.

  • во первых, если есть email то логин не нужен.
  • во вторых пусть инвайт будет ссылкой, скажем http://example.com/register/44878dhjhdjh47
  • ещё рассмотрите вопрос о генерации инвайтов на email, тогда email подтверждать не придется (в кабинете кнопка "выслать инвайт" пользователь указывает email друга, другу приходит приглашение)
  • может быть стоит сделать ttl для приглашений - чтобы можно было возвращать старые приглашения, для непринятых (30 дней скажем действует)

Таблица с приглашениями должна выглядеть примерно так:

id varchar (64) primary,issuer_id int,email varchar(255) unique, issued_date, used shorint default 0;

когда человек приходит по ссылке c id, вы делаете следующее - проверяете поле used у соответствующего приглашения (select from invites where id=':id' and used=0), спрашиваете подтверждение TOS, пароль, имя/ник, заводите пользователя и выставляете used в 1.

Можно ещё для злостных троллей аннулировать их приглашения, удалять старые приглашения и пр.

Ах да - проверить сколько пользователь может выписать приглашений можно так-же выборкой из базы.

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

Answer 3

Введите 2 столбца у пользователя, т.е. 2 пустых слота, к примеру записывать туда id приглашенных. А инвайт можешь сделать какой нить закодированный ID приглашающего (не хэш, чтобы можно было понять кто кодировал), или хэш ID приглашающего (тогда его надо будет заносить в базу). Приглашенный вводит заветный инвайт, если слот у приглашающего свободен, записываем туда ID нового пользователя (Если в базе пользователей <5000, иначе естественно не давать зарегестрироваться). p.s. Данные извращения я привел только ради поставленной цели, т.е. поставленные цели я считаю дикими :)

Ввод инвайта, дрожащими от волнения руками, затаив дыхание - это ведь целый ритуал :D

какая-то секта по вводу инвайта. Складывается впечатление, что вся цель сайта - ввод инвайта )))

READ ALSO
Выборка данных из большой таблицы MySQL

Выборка данных из большой таблицы MySQL

Доброе утро, друзьяУ меня есть большая таблица заказчиков: t_customer с 10

240
Помогите организовать SQL-запрос

Помогите организовать SQL-запрос

У меня есть такая таблица:

178
Архитектура БД для экспорта таблицы

Архитектура БД для экспорта таблицы

Заранее извиняюсь за много букв

159
Все элементы, родитель которых - корневой

Все элементы, родитель которых - корневой

Есть таблица с такой структурой:

182