Разрешить регистрацию phpbb3, если пользователь зарегистрировался на другом сайте - PullRequest
0 голосов
/ 23 июля 2011

Итак, я работаю над сайтом, на котором мы хотим, чтобы пользователи подписались на приватную бета-версию.Когда пользователь нажимает «Отправить» на странице регистрации, код php помещает свое имя, адрес электронной почты и случайно сгенерированный 32-символьный хэш в таблицу в моей базе данных.Затем он отправляет пользователю электронное письмо, содержащее ссылку для проверки, которая включает в себя адрес электронной почты пользователя и хеш для максимальной безопасности.Это выглядит так:

domain.com/b/verify.php?email=sample@sample.com&hash=1a2a3a4a5a6a7a8a9a8a7a6a5a4a3a2a

Когда они щелкают по этой ссылке, она отправляет их на страницу verify.php, которая берет электронную почту и хэш из URL-адреса и проверяет совпадение в ранее упомянутой базе данных.Если есть совпадение, он генерирует другое сообщение.Если совпадений нет, выдается «неверный URL или вы еще не зарегистрировались».Кроме того, таблица базы данных содержит столбец с именем «active», который по умолчанию имеет значение 0, но при щелчке по ссылке изменяется на 1.Код verify.php проверяет, чтобы убедиться, что active установлен в 0, прежде чем отображать сообщение о совпадении, чтобы ссылка могла использоваться только один раз.

Сообщение, отображаемое при совпадении, дает им ссылку на мою страницу регистрации phpbb3., который был изменен.Ссылка выглядит следующим образом:

domain.com/phpbb/ucp.php?mode=register&email=sample@sample.com&hash=1a2a3a4a5a6a7a8a9a8a7a6a5a4a3a2a

Я изменил свой файл ucp.php в корневом каталоге моего форума, чтобы он выглядел так:

case 'register':
        // Database info (which I stupidly forgot not to hide prior to this...

        if(isset($_GET['email']) && !empty($_GET['email']) AND isset($_GET['hash']) && !empty($_GET['hash'])){
            // Verify data
            $email = mysql_escape_string($_GET['email']); // Set email variable
            $hash = mysql_escape_string($_GET['hash']); // Set hash variable

            $search = mysql_query("SELECT email, hash FROM users WHERE email='".$email."' AND hash='".$hash."' AND active='1'") or die(mysql_error()); 
            $match  = mysql_num_rows($search);

            if($match > 0){
                // We have a match, activate the account
                mysql_select_db("db2") or die(mysql_error());
                if ($user->data['is_registered'] || isset($_REQUEST['not_agreed']))
                {
                redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
                }

                $module->load('ucp', 'register');
                $module->display($user->lang['REGISTER']);

            }else{
                // No match -> invalid url or account has already been activated.
                mysql_select_db("db2") or die(mysql_error());
                if ($user->data['is_registered'] || isset($_REQUEST['not_agreed']))
                {
                redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
                } else {
                redirectpage();
                }
            }

        }else{
            // No match -> invalid url or account has already been activated.
                redirectpage();
        }
break;

Этот же код используется при проверке.php страницу, за исключением того, что я изменил ее, так что active не должен быть установлен в 0 для работы.

Все это работает по большей части: страница перенаправляется правильно, если не указан адрес электронной почты или хэш, илиесли это неверно.Единственная проблема заключается в том, что когда пользователь нажимает кнопку «Я согласен» на странице соглашения о регистрации, по какой-то причине в игру вступает редирект.Он не переносит их на следующую страницу, где существует форма регистрации.

Это также произошло, когда я попытался пропустить страницу соглашения о регистрации.Он успешно пропустил его, но после того, как я заполнил регистрационную форму и нажал «Отправить», он снова вызвал мою функцию перенаправления.

Кто-нибудь знает, почему перенаправление происходит при каждом нажатии кнопки отправки?

1 Ответ

0 голосов
/ 23 июля 2011

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

...