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

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

domain.com/b/[email protected]&hash=1a2a3a4a5a6a7a8a9a8a7a6a5a4a3a2a

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

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

domain.com/phpbb/ucp.php?mode=register&[email protected]&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;

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

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

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

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


person Purag    schedule 23.07.2011    source источник


Ответы (1)


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

person Chris    schedule 23.07.2011
comment
Проблема в том, что я не слишком хорошо разбираюсь в PHP, и я недостаточно знаю о phpbb3, чтобы знать, какие значения фактически передаются при отправке формы... если вы знаете, как я могу это настроить, я был бы очень признателен за помощь. Мне нужно уложиться в короткие сроки, и я хотел бы сделать это раньше. - person Purag; 23.07.2011
comment
Закомментируйте свой код и нажмите кнопку отправки, чтобы перейти на последнюю страницу. Задокументируйте, на какую страницу он вас отправляет, особенно какие переменные передаются после .php? Разместите здесь, и я постараюсь вам помочь. - person Chris; 24.07.2011
comment
Я пытался сделать это и не заметил никаких изменений в URL-адресе или дополнений к передаваемым переменным... это довольно странно. Что я должен делать? - person Purag; 25.07.2011
comment
Где размещен скрипт? Будет легче, если я увижу страницу. - person Chris; 25.07.2011
comment
Спасибо за всю твою помощь, Крис, но, оказывается, мне это на самом деле не нужно. Однако ваш ответ был правильным, поэтому он принят. - person Purag; 18.08.2011