如果用户已在其他网站上注册,则允许phpbb3注册

时间:2011-07-23 01:03:26

标签: php phpbb3 url-parameters

所以我正在一个我们希望用户注册私人测试版的网站上工作。当用户在注册页面上单击“提交”时,php代码会将其名称,电子邮件和随机生成的32个字符的哈希值放入我的数据库中的表中。然后,它会向用户发送一封电子邮件,其中包含验证链接,其中包含用户的电子邮件地址和最终安全性的哈希值。它看起来像这样:

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

当他们点击此链接时,它会将它们发送到verify.php页面,该页面从网址获取电子邮件和哈希,并检查前面提到的数据库中的匹配项。如果匹配,则会生成另一条消息。如果没有匹配,则表示“网址无效或您尚未注册”。此外,数据库表包含一个名为“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;

在verify.php页面上使用的相同代码,除了我更改它以便不必将active设置为0才能工作。

这一切都在很大程度上起作用:如果没有给出电子邮件或散列,或者它是不正确的,页面会重定向。唯一的问题是,当用户点击注册协议页面上的“我同意”按钮时,重定向会因某种原因发挥作用。它不会将它们带到存在注册表的下一页。

当我试图跳过注册协议页面时也会发生这种情况。它成功地跳过它,但在我填写注册表单并单击“提交”后,它再次触发了我的重定向功能。

任何人都知道为什么在按下提交按钮时会发生重定向?

1 个答案:

答案 0 :(得分:0)

我想这个页面正在被重定向,因为每次点击提交按钮,它都会将你发送到同一页面,并且模式被设置为'register',而它没有在电子邮件或哈希上添加从形式。因此,只需为重定向设置一个例外,以便在单击“提交”以转到最终页面时传递任何值。