Регистрация пользователя

Источник: http://spectator.ru/

Дмитрий Смирнов

На многих сайтах есть регистрация пользователя. Начиная с livejournal.com и заканчивая dirty.ru. Мне недавно довелось делать самому такую регистрацию, и я придумал одну идею, которая не претендует на гениальность, однако используется она далеко не везде. По крайней мере, я ничего подобного до сих пор не видел. Может быть, плохо смотрел. Но факт остается фактом.

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

Добавим сюда же проблему валидных email’ов. Очень часто там нужно, чтобы при регистрации пользователь указывал существующий и работающий ящик. Это была постановка задачи: мы рассчитываем на массовую регистрацию. Нам нужен пользователь с валидным email’ом, при этом нам нужно отсекать регистраторов, которые просто хотят проверить, «как это работает».

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

Но я придумал способ чуть-чуть элегантнее и проще.

1. В начале регистрации пользователь вводит необходимые данные: логин, пароль и email. Здесь мы проверяем логин на уникальность и пароль на соответствие нормам безопасности. Если все хорошо, то на основе этих данных генерится уникальная ссылка, которая отправляется пользователю по почте. («Вы должны нажать на эту ссылку, чтобы продолжить регистрацию»).

Уникальная ссылка выглядит примерно так: login=qwerty&password=zzzzzzz&email=mail@mail.ru
&approve=c76681e374ff48fc282af35bc9e25007
. Аpprove — это md5, завязанная на логин-пароль и какую-нибудь уникальную строку, которую знает только ваш сервер. Кстати, пароль при регистрации можно не спрашивать, и, соответственно, в секретном УРЛе не передавать, а генерить автоматически и высылать после регистрации.

В базу пользователей при этом абсолютно ничего не пишется. Если пользователь указал кривой email, или просто забыл/не посчитал нужным продолжить регистрацию — это его проблемы, мы про него не помним.

2. Пользователь нажал на ссылку. Мы тут же про него вспоминаем (берем информацию о нем из уникальной ссылки, а не из базы), заводим его в базе, автоматически логиним и отправляем… нет, не на страницу «продолжение регистрации». Во многих системах я наблюдал ненужное дублирование: есть страница регистрации, на которой пользователь вводит данные, и есть место (назовем его «страница пользователя»), где пользователь уже после регистрации может изменить эти данные. Но, по сути дела, эти страницы — одно и то же. «Так зачем платить дважды?»…

Поэтому мы создаем, логиним пользователя и отправляем его на его же незаполненную страницу пользователя. Если там есть required fields, то там ему и пишем: «Заполните такие-то поля, а то аккаунт мы вам так и не включим».

С точки зрения простого пользователя все выглядит совсем не страшно: ему нужно всего-то ввести логин-пароль-email, после чего нажать на ссылку в письме. (Всякие лицензионные соглашения тоже можно, наверное, в этом письме отсылать). И он попадет на страницу пользователя, которой он после этого будет не раз пользоваться — так что пусть привыкает.

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

Вот и вся идея. Надеюсь, кому-нибудь будет полезно.

Подробности для тех, кто не понял.