Авторизация пользователя

tasii

Новичок
Авторизация пользователя

Расскажите пожалуйста принципы авторизации пользователя . Допустип у меня есть на сайте пользователям предлагается заполнить форму с e-mail ,а потом надо выслать на этот e-mail письмо с сылкой на страницу, куда им надо зайти для активации пароля
Подскажите как это сделать (лучше ,конечно покажите код) Заранее благодарен
 

Romantik

TeaM PHPClub
tasii
в базу складываешь данные и еще добавляешь поле hash md5
и ставишь статус 0 (не активен)
далее отсылаешь письмо где в УРЛ ставишь сгенерированный hash
по нажатию ссылки в письме проверяешь совпадение hash и статус=0
если совпадает то ставишь статус 1 и ок
если хеш совпадает а статус не 0 значит уже был активирован.
 

Romantik

TeaM PHPClub
у тебя в базе будет статус=1
статус изменится когда человек нажмет ссылку- скрипт проверит что в базе и в $_GET хеш совпадают и в базе статус=0
 

0xHH

Новичок
Romantik

Лучше поле hash вынести в отдельную таблицу, тогда поле статус будет не нужен. И объём бд уменьшится.

При добавлении нового юзера, будет добавляться userid, hash в эту таблицу. Если юзер авторизировался, запись о юзере удаляется с этой таблицы. Незачем хранить лишнее поле.
 

0xHH

Новичок
Фанат
username и password можно спрашивать только после валидации мыла.

-~{}~ 18.07.06 20:35:

Фанат
фиговый способ всё таки. Так как email адрес не добавляется в базу, он может быть заспамлен.
 

sage

Новичок
0xHH
этот способ фиговый не поэтому. А по другой причине. Допустим, посетитель ввёл в поле логин "test", ему на мыло отправилась ссылка, всё нормально. Но мыло не пришло через n-ое кол-во минут, часов и т.д. (работы ведутся на почтовом сервере посетителя). За это время на сайт зашел другой посетитель и также, как и первый ввёл в поле логин: "test". Уникальность логина в обоих случаях выполняется. Но на момент регистрации 2-ого пользователя у нас уже был почтипользователь с таким логином. Результат этого всего - второй активирует ссылку раньше первого. Что из этого выходит, сами понимаете.

tasii
я вижу несколько другой способ регистрации. Есть 2 таблицы: одна с теми, кто на активационную ссылку не нажал и не заполнил форму, другая - с теми, кто уже эту процедуру осилил. На первоначальном этапе вводится только e-mail и логин. Проверяется на уникальность. Пишется в базу. На мыло отправляется ссылка с активационным кодом. При заходе ищется в базе данная ссылка. Если существует, то показываем форму, в которой принуждаем (а иначе аккаунт не создадим) заполнить остальные поля формы (фио, пароль и т.д.). Как только форму заполнил, нажимает на сохранить - всё проверяем на валидность и, если всё ок, убираем запись из таблицы с неактивированными пользователями и добавляем в таблицу с активированными.
 

Romantik

TeaM PHPClub
0xHH
Если юзер авторизировался, запись о юзере удаляется с этой таблицы. Незачем хранить лишнее поле.
Фиговое решение!
хеш хранится еще так же для восстановления пароля.
 

0xHH

Новичок
Для восстановления пароля изменяется его пароль и хеш строится на основе хеша пароля и username/email, etc
 
Сверху